非静的内部クラスの静的メソッド: Java と Java 16
Java では、非静的内部クラスに静的メソッドが存在しない内部クラスは長年にわたる制限でした。なぜこの制限が存在するのかという疑問が生じます。
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>
この場合、内部クラスは静的に宣言されています。つまり、内部クラスは外部クラスの特定のインスタンスにバインドされていません。クラス。その結果、静的メソッドは特定のインスタンスに関連付けられないため、内部クラス内で定義できます。
Java 16 以降: 制限の削除
In Java 16 では、この制限は解除されました。非静的内部クラスで静的メソッドを宣言できるようになりました。ただし、内部クラスの静的メソッドは外側のクラスとクラス名を共有するため、名前の競合が発生する可能性があるため、その際は注意が必要です。
以上が質問形式に焦点を当て、記事に基づいて考えられるタイトルをいくつか示します。 直接的かつ簡潔: * Java ではなぜ非静的内部クラスに静的メソッドを持てないのでしょうか? * 静的メソッドはいいえの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。