在我的代码中,我有这一行:
private static ArrayList<Item> items = new ArrayList<Item>();
然后我像这样定义了我的setter函数
public void setItems(ArrayList<Item> items) {
this.items = items;
}
NetBeans抱怨Accessing static field items, replace with class reference?
如果我用类MyClass.items = items;
之类的类引用替换此调用,它将不会传播到当前对象中,不是吗?
答案 0 :(得分:2)
静态变量永远不会“传播”到“当前”对象中。
它是静态的,绑定到类。它甚至没有类的实例,所以没有必要“传播”它。
顺便说一下:我会更改方法参数的名称,在方法内两次使用相同的名称会很困惑(如果参数未像静态变量那样命名,则不需要这样做:
public void setItems(ArrayList<Item> itemList) {
items = itemList;
}
答案 1 :(得分:2)
一旦你在你的班级中宣布一个成员为static
,那么它就属于这个班级。
也就是说,它将在创建第一个对象实例时仅定义一次。那将存储在类的堆栈中。
休息该类的所有实例将共享成员变量。
声明非静态变量时,每当我们为该类创建对象时,将为该变量分配一个单独的内存,该内存将特定于该实例。
在这种情况下private static ArrayList<Item> items = new ArrayList<Item>();
是类的成员变量。虽然您可以使用this
访问变量,但会产生混淆。在实例变量的情况下使用this
,而通过类名本身访问静态成员变量。
我希望这清除了疑点。
答案 2 :(得分:1)
我不确定你是否希望items
是静态的。静态属性意味着变量是全局的。
如果您希望每个对象都有自己的items
实例,则必须删除static
修饰符。