6

匿名クラスと静的内部クラスのベスト プラクティス (設計とパフォーマンスの観点から) は何ですか?

個人的には、静的内部クラスはより良いカプセル化を提供し、クラス外のファイナライズされた変数にアクセスできないため、パフォーマンスが向上すると思います。しかし、私はこれについて本当に疑問に思ったことはありません。

これについての投稿を 1 つ見つけましたが、それについての質問に実際には答えていないと感じました。人々の個人的な考えです。

4

2 に答える 2

4

内部クラス (静的であろうとなかろうと) は、匿名クラスとまったく同じように、それらを囲むクラスのフィールドとメソッドにアクセスできます。何かにアクセスするには、囲んでいるクラスのインスタンスへの明示的な参照が必要です。もちろん、それを行う必要がある場合、それは通常、内部クラスを作成した囲んでいるクラスのインスタンス上にあるため、非静的内部クラスを使用する方が簡単で明確です。

例:

  • 内部クラス (非静的)

    class A {
        private int field;
    
        private class B {
            public void doSomething() {
                field++; // Valid
            }
        }
    }
    
  • ネストされたクラス (つまり、「静的内部クラス」)

    class A {
        private int field;
    
        private static class B {
            public void doSomething(A a) {
                a.field++; // Valid
            }
        }
    }
    
  • 匿名クラス

    class A {
        private int field;
    
        public void doSomething() {
            new Runnable() {
                @Override
                public void run() {
                    field++; // Valid
                }
            }
        }
    }
    

そのアクセシビリティを使用するかどうかは別の問題です。囲んでいるクラスのプライベート フィールドにアクセスすると、アクセサーが生成されるため、メソッドを呼び出すコストはフィールドにアクセスするコストと同じではないため、パフォーマンスに影響を与える可能性がありますが、ほとんどの場合、無視できる可能性があります。 . 測定に基づかないマイクロ最適化を行う前に、(デザインと機能の両方の観点から) 正しいコードを最初に記述する必要があります。とにかく、JIT コンパイラーは多くのことを行います。

于 2012-09-24T08:12:02.020 に答える
1

サンプルを入手するには、Java ソース コード コレクションとパターンを参照してください (これらは JDK ディレクトリの src.zip にあります。Eclipse では、インライン ヘルプでコードを読むことができます。

効果的な Javaの本を読んで、仕組みを理解するために内部クラスを探し staticinnerその他の便利なinterfaceクラスenumやその他のクラス

于 2012-09-24T07:59:29.653 に答える