在 Java 16 之前的版本中,尝试定义静态方法在非静态内部类中会导致编译器错误。例如,以下代码片段将失败:
<code class="java">public class Foo { class Bar { static void method() {} // Compiler error } }</code>
非静态内部类与其封闭类的实例相关联。内部类的每个实例都有一个对其封闭类实例的隐藏引用。这意味着内部类中的静态方法必须维护对封闭类的引用,这违反了 принцип изоляциии интерфейса.
要在内部类中定义静态方法,您必须将内部类声明为静态。静态内部类没有对其封闭类的实例的隐式引用。因此,它可以定义静态方法:
<code class="java">public class Foo { static class Bar { // now static static void method() {} } }</code>
以上是为什么在版本 16 之前的 Java 中不能在非静态内部类中定义静态方法?的详细内容。更多信息请关注PHP中文网其他相关文章!