NetBeans: доступ к статическому полю - Заменить ссылкой на класс - PullRequest
1 голос
/ 13 сентября 2011

В моем коде у меня есть эта строка:

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

и затем я определил свою функцию установки следующим образом

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

И NetBeans жалуется Accessing static field items, replace with class reference?

Если бы я заменил этот вызов ссылкой на класс, такой как MyClass.items = items;, он бы не распространялся на текущий объект, не так ли?

Ответы [ 3 ]

2 голосов
/ 13 сентября 2011

Хорошо, если вы объявили члена в своем классе как static, тогда он принадлежит классу.То есть он будет определен только один раз при создании первого экземпляра объекта.То есть будет храниться в стеке класса.Остальные все экземпляры класса будут совместно использовать переменную-член.Когда объявляется нестатическая переменная, всякий раз, когда мы создаем объект для этого класса, для этой переменной выделяется отдельная память, которая будет специфичной для этого экземпляра.

В этом случае private static ArrayList<Item> items = new ArrayList<Item>();

является переменной-членом класса.Хотя вы можете получить доступ к переменной, используя this, но это создает путаницу.this используется в случае переменной экземпляра, тогда как статические переменные-члены доступны через само имя класса.Я надеюсь, что это проясняет сомнения.

2 голосов
/ 13 сентября 2011

Статическая переменная никогда не «распространяется» на «текущий» объект.

Это статично, привязано к классу. Он живет даже без экземпляра класса, поэтому нет необходимости «размножать» его.

Кстати: я бы изменил имя параметра метода, это путает иметь одно и то же имя дважды внутри метода (и вам не нужно это, если параметр не был назван как статическая переменная:

public void setItems(ArrayList<Item> itemList) {
    items = itemList;
}
1 голос
/ 13 сентября 2011

Я не уверен, хотите ли вы, чтобы items был статичным. Статическое свойство означает, что переменная является глобальной.

Если вы хотите, чтобы у каждого объекта был свой экземпляр items, вам придется удалить модификатор static.

...