ホームページ  >  記事  >  Java  >  バージョン 16 より前の Java では、非静的内部クラスで静的メソッドを定義できないのはなぜですか?

バージョン 16 より前の Java では、非静的内部クラスで静的メソッドを定義できないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-28 04:43:30728ブラウズ

Why Can't You Define a Static Method in a Non-Static Inner Class in Java Prior to Version 16?

Java 16 より前の非静的内部クラスの静的メソッド

問題

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。