【问题标题】:Java cannot have a static class inside an inner class?Java不能在内部类中有静态类?
【发布时间】:2022-01-05 16:11:12
【问题描述】:

已解决:感谢@Pshemo,问题现已解决:在更改规则后,Java 16 或更高版本中不会出现此问题。

问题: Java 允许在外部类中使用静态嵌套类,并在这些静态嵌套类中允许进一步的静态嵌套类。它还允许嵌套在外部类中的非静态(“内部”)类。但由于某种原因,我无法将静态类嵌套在内部类中。

为什么下面的代码编译失败?

class Outer
{
    // OK
    static class Static
    {
        // OK
        static class StaticDoubleNested
        {
        }
    }

    // OK
    class Inner
    {
        // BAD
        // "error: modifier static not allowed here"
        static class StaticDoubleNested
        {
        }
    }
}

研究:我在网上搜索并没有发现任何表明您不能将静态类放在内部类中,以及编译器给出的错误消息(在示例代码注释中注明) ) 在用作搜索词的一部分时似乎没有帮助。我是使用 Cherry Audio Voltage Module Designer 作为环境的 Java 菜鸟(我相信无论安装什么 JDK 都使用 Java 13),所以不知道如何从命令行编译/运行示例代码,而是尝试了它在一个在线编译器中,结果证明它更老了,所以这个问题很困惑。此外,我从未怀疑过这种看似基本的语言内容只会在最近几年发生变化,同时在互联网上也很难找到任何相关内容。看来我落入了所有的陷阱!

【问题讨论】:

  • 您的 Java 版本是多少?我不记得它是什么时候改变的(我的猜测是在 Java 14 左右),但在 Java 17 中它编译得很好。
  • 谢谢,请原谅我有点不确定,但我认为它是 16.0.1 版本,并且也发生在此处找到的版本上:programiz.com/java-programming/online-compiler
  • 如果您在此站点上执行 System.out.println(System.getProperty("java.version")); 之类的代码,您将看到它正在运行的版本,并且根据结果 11.0.11 它是 Java 11,因此在这些规则更改之前。
  • 我安装了当时推荐的JDK,以为不能用较新的,但看来可以安装较新的了,再次感谢!
  • 感谢@ScottWelker,我试图让它变得更好一些,同时也说明了我在研究中的失败之处,以便其他人可以从我的错误中吸取教训。

标签: java class static nested


【解决方案1】:

由于您的内部类和外部类调用相同的(静态)方法“静态类 StaticDoubleNested”,内部类方法是否只是覆盖外部类方法?

如果是这样,那么接口或抽象类将是您的选择。

【讨论】:

  • 谢谢,但从上面的 cmets 中@Pshemo 所说,这是因为我使用的是旧版本的 Java。
猜你喜欢
  • 1970-01-01
  • 2015-11-04
  • 2011-05-10
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多