【发布时间】: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,我试图让它变得更好一些,同时也说明了我在研究中的失败之处,以便其他人可以从我的错误中吸取教训。