2011-09-13 9 views
1

クラスを参照して交換してください:Netbeansの: - staticフィールドへのアクセスは、私はこのライン持っている私のコードで

private static ArrayList<Item> items = new ArrayList<Item>(); 

をして、私はこの

public void setItems(ArrayList<Item> items) { 
    this.items = items; 
} 

ように私のsetter関数を定義し、NetBeansはAccessing static field items, replace with class reference?

を不平を言います

この呼び出しをMyClass.items = items;のようなクラス参照に置き換えると、現在のオブジェクトに伝播されませんでしたか?

+0

静的プロパティを設定するインスタンスメソッド..リファクタリングしたい場合があります:p。オブジェクトの 'items'のインスタンスにアクセスするには、静的修飾子を削除する必要があります。 – Kevin

+0

クラスインスタンス内の静的クラスメンバーの値を変更することはできませんか? –

+0

なぜ静的メソッドを作成してもいいのですか? – Kevin

答えて

2

静的変数は決して "現在の"オブジェクトに "伝播"されません。

静的で、クラスにバインドされています。それはクラスのインスタンスがなくても生きるので、それを「伝播」する必要はありません。

Btw:メソッドの名前を変更すると、メソッド内で同じ名前を2回使用するのは混乱します(静的変数のようにパラメータが指定されていない場合は不要です)。

public void setItems(ArrayList<Item> itemList) { 
    items = itemList; 
} 
+0

静的メンバーの値を変更すると、すべてのアプリケーションが変更されますか? –

+1

はい、それは静的変数の性質です –

+0

OK、ありがとうございますa_horse_with_no_name –

1

は、私はあなたがitemsは、静的になりたいかはわからない。静的プロパティは、変数がグローバルの一種であることを意味している。

あなたは、各オブジェクトがitemsの独自のインスタンスを持っているしたい場合は、よstatic修飾子を削除する必要があります。

+0

いいえ、私は静的にする必要があります。それは、グローバル変数の振る舞いを置き換える必要があるからです。 –

+0

グローバル変数の振る舞いを置き換える必要がある場合、静的変数は**への道ではありません**。 – Kevin

+0

とは何より良い方法ですか?どんな種類の共有オブジェクトを使うべきですか? –

2

あなたのクラスのメンバーをstaticと宣言した後は、そのクラスに属します。 これは、最初のオブジェクトインスタンスが作成されるときに1回だけ定義されます。それはクラスのスタックに格納されます。 クラスのすべてのインスタンスがメンバ変数を共有します。 非静的変数が宣言されると、そのクラスのオブジェクトを作成するたびに、そのインスタンスに固有の個別のメモリがその変数に割り当てられます。この場合

private static ArrayList<Item> items = new ArrayList<Item>();

クラスのメンバ変数です。 thisを使用して変数にアクセスできますが、混乱が生じます。 thisはインスタンス変数の場合に使用され、静的メンバー変数はクラス名自体を介してアクセスされます。 これが疑いをなくすことを望みます。

+0

'最初のオブジェクトインスタンスの作成時に一度だけ定義されます.'これは正しくありません。http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html'オブジェクトは変更可能ですクラス変数の値がクラスのインスタンスを作成せずに操作することもできます。 'それはそうではありませんか?あなたの答えの残りは良いです、ありがとう –

+0

@Merek Sebera:オブジェクトのインスタンスのそれぞれは静的変数のための別のmomory割り当てを持っていますか?私が言いたいのは、クラスがJVMにロードされると、静的変数のメモリが1回だけ割り当てられるということでした。 – Amanpreet

+0

いいえすべての関心のあるクラス間で共有されるインスタンスは1つだけです。そしてそれらのすべてが同じメモリロケーションにアクセスします。しかし、はい、あなたのpovは正しいです。 –

関連する問題