#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;
}
Изменение, как указано выше, устранит вашу проблему.