23

static私は別の内部クラスを持つクラスを持っています:

class A {
    private List<String> list;

    public static class B {
        // I want to update list here without making list as static 
        // I don't have an object for outer class
    }
}
4

5 に答える 5

16

通常、インスタンス変数にアクセスする必要がない場合は、静的クラスを使用します。インスタンス変数にアクセスする必要がある場合は、クラスを非静的にします。

于 2013-07-17T13:09:48.097 に答える
6

いいえ、そうするには非static内部クラスが必要です。

JLS §8.5.1から:

キーワードは、非内部クラスまたはインターフェイスの本体内のstaticメンバー型の宣言を変更する場合があります。その効果は、それが内部クラスではないことを宣言することです。の静的メソッドがその本体に T の現在のインスタンスを持たないのと同様に、 の現在のインスタンスも、字句的に囲んでいるインスタンスも持ちません。CTCTCT

staticクラスに含まれているクラスの非静的メンバーの使用が含まれている場合、コンパイル時エラーになります。

于 2013-07-17T13:12:51.470 に答える
1

あなたのコードでlistは、クラスのインスタンス変数であり、AネストBされた静的クラスです。静的メンバーではなく静的メンバーへのアクセスの規則は、ネストされた静的クラスでは変更されません。

  • 変数listはインスタンス変数であるため、静的コンテキストからはアクセスできません。
  • これを有効にするには、静的ネスト クラスを内部クラスに変更する必要があります。

    class A {
    private List<String> list = new ArrayList<String>();
      public class B {
         public void someMethod(){
             list.add("abc");
         }
      }
    }
    
于 2013-07-17T13:13:01.157 に答える