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
}
}
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
}
}
通常、インスタンス変数にアクセスする必要がない場合は、静的クラスを使用します。インスタンス変数にアクセスする必要がある場合は、クラスを非静的にします。
いいえ、そうするには非static
内部クラスが必要です。
JLS §8.5.1から:
キーワードは、非内部クラスまたはインターフェイスの本体内の
static
メンバー型の宣言を変更する場合があります。その効果は、それが内部クラスではないことを宣言することです。の静的メソッドがその本体に T の現在のインスタンスを持たないのと同様に、 の現在のインスタンスも、字句的に囲んでいるインスタンスも持ちません。C
T
C
T
C
T
static
クラスに含まれているクラスの非静的メンバーの使用が含まれている場合、コンパイル時エラーになります。
あなたのコードでlist
は、クラスのインスタンス変数であり、A
ネストB
された静的クラスです。静的メンバーではなく静的メンバーへのアクセスの規則は、ネストされた静的クラスでは変更されません。
list
はインスタンス変数であるため、静的コンテキストからはアクセスできません。これを有効にするには、静的ネスト クラスを内部クラスに変更する必要があります。
class A {
private List<String> list = new ArrayList<String>();
public class B {
public void someMethod(){
list.add("abc");
}
}
}