Добавление нескольких объектов в список массивов приводит к многократному добавлению только последнего элемента

#java #android #arraylist

#java #Android #arraylist

Вопрос:

Я пытаюсь добавить объекты в 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.

Что случилось?

Спасибо.

Ответ №1:

потому setType что это static , который не связан с состоянием объекта

 MyObject.setType = 1;
 

удалите static ключевое слово из setType delcaration в MyObject классе и установите его значение для каждого экземпляра


См .

Комментарии:

1. Привет, я допустил опечатку в исходном опубликованном коде. На самом деле я не вызывал MyObject.setType(), а вместо этого вызывал setType экземпляра, т.е. testObject1.setType(0) и testObject2.setType(1)

2. опубликуйте полное тело вашего метода setType

3. Выполнено. Он находится в классе MyObject .

4. это то же самое, что вы присваиваете значение static переменной, которая не для каждого объекта, а для каждого загруженного класса, поэтому все экземпляры имеют общие значения, пожалуйста, перечитайте мой ответ

Ответ №2:

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

Вы не должны устанавливать статическую переменную из метода экземпляра.

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

Изменение, как указано выше, устранит вашу проблему.