【问题标题】:Adding multiple objects to an ArrayList results in only the last item being added multiple times将多个对象添加到 ArrayList 会导致多次添加最后一项
【发布时间】:2014-08-14 08:07:17
【问题描述】:

我正在尝试将对象添加到 ArrayList,但似乎每当我调用 add 方法时,列表仅由我添加的最后一个对象填充。

我是这样添加的:

MyObject testObject1 = new MyObject();
testObject1.setType(0);
MyList.myList.add(testObject1);
MyObject testObject2 = new MyObject();
testObject2.setType(1);
MyList.myList.add(testObject2);

MyList 是一个具有单个 ArrayList 的类,其定义如下:

public static ArrayList<MyObject> myList = new ArrayList<MyObject>();

MyObject 是一个有一些成员变量和方法的类:

static int type;
public void setType(int inType) {
  type = inType;
}

然后我列出 MyList.myList 中的对象如下:

for (int i=0; i<MyList.myList.size(); i++) {
  Log.d(TAG, "Type is " + MyList.myList.get(i).getType());
}

它列出了 2 个对象,但类型始终为 1。

怎么了?

谢谢。

【问题讨论】:

    标签: java android arraylist


    【解决方案1】:
    static int type;
    public void setType(int inType) {
      type = inType;
    }
    

    您不应该从实例方法中设置静态变量。

    int type;
    public void setType(int inType) {
      type = inType;
    }
    

    如上更改将解决您的问题。

    【讨论】:

      【解决方案2】:

      因为setTypestatic,与对象的状态无关

      MyObject.setType = 1;
      

      setTypeMyObject 类中的声明中删除static 关键字,并为每个实例设置其值


      【讨论】:

      • 您好,我在原始发布的代码中打错了字。我实际上并没有调用 MyObject.setType(),而是调用了实例的 setType,即 testObject1.setType(0) 和 testObject2.setType(1)
      • 发布您的 setType 方法全文
      • 完成。它在 MyObject 类中。
      • 它与您为static 变量分配值相同,它不是每个对象而是每个加载的类,因此所有实例共享值,请重新阅读我的答案
      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 2018-03-18
      • 2014-09-15
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      相关资源
      最近更新 更多