Netbeans:访问静态字段 - 替换为Class引用

时间:2011-09-13 10:10:51

标签: java netbeans static static-members

在我的代码中,我有这一行:

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;之类的类引用替换此调用,它将不会传播到当前对象中,不是吗?

3 个答案:

答案 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修饰符。