Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как изменить свойства объекта в ArrayList


Автор: positiveman 10.3.2012, 21:00
Имеется список объектов в ArrayList. Как можно изменить свойства объекта, находящегося в этом массиве?


Код

ArrayList list = new ArrayList();
...
Surface surface = (Surface) list.get(row);
surface.setA(a);


Этот код изменяет свойство в копии объекта из массива, но как изменить его в объекте, находящемся в массиве? 

Код

ArrayList list = new ArrayList();
...
Surface surface = (Surface) list.get(row);
list.get(row).setA(a);


А такой код, конечно, работать не будет :(

Автор: Samotnik 10.3.2012, 23:39
Цитата(positiveman @  10.3.2012,  21:00 Найти цитируемый пост)
 как изменить его в объекте, находящемся в массиве? 

Использовать метод set:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#set(int, java.lang.Object)

Автор: Shaggie 11.3.2012, 00:33
Цитата(positiveman @  10.3.2012,  22:00 Найти цитируемый пост)
Этот код изменяет свойство в копии объекта из массива, но как изменить его в объекте, находящемся в массиве? 

Проверял? Точно проверял? Проверь ещё раз.
Объекты в коллекциях хранятся и выдаются по ссылкам. После вызова get(row) возвращается не копия объекта, а ссылка на существующий.

Цитата(positiveman @  10.3.2012,  22:00 Найти цитируемый пост)
А такой код, конечно, работать не будет :( 

Оба примера кода идентичны и делают одно и то же - берут ссылку на объект из коллекции и меняют свойство по ссылке.
А второй не работает, потому что у тебя коллекция не типизированная, и из коллекции возвращается Object. Либо типизируй коллекцию:
Код

ArrayList<Surface> list = new ArrayList<Surface>();

либо явно приводи тип после получения объекта из коллекции:
Код

((Surface) list.get(row)).setA(a);


Цитата(Samotnik @  11.3.2012,  00:39 Найти цитируемый пост)
Использовать метод set:
http://docs.oracle.com/javase/1.4.2/docs/a...st.html#set(int, java.lang.Object)

Не имеет смысла. Не нужно замещать объект в коллекции новым, если достаточно изменить свойство у имеющегося.

Автор: Samotnik 11.3.2012, 00:59
Цитата(Shaggie @  11.3.2012,  00:33 Найти цитируемый пост)
Не имеет смысла. Не нужно замещать объект в коллекции новым, если достаточно изменить свойство у имеющегося. 

Ну это зависит от ситуации, кому как удобнее и нужнее  smile 

Автор: positiveman 14.3.2012, 08:00
Цитата

((Surface) list.get(row)).setA(a);


Вот оно что! Спасибо!!! Работает!

Цитата

Использовать метод set:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#set(int, java.lang.Object)


Возьму на заметку, им тоже можно. Даже не пойму, как это я его не заметил в документации. Спасибо!!!

Автор: Karadul 22.3.2012, 22:22
Цитата(positiveman @  10.3.2012,  21:00 Найти цитируемый пост)
Surface surface = (Surface) list.get(row);

Маленькое замечание - а почему list не List<Surface>? Тогда и приведение типов не понадобится.

Автор: koshkajm 22.3.2012, 23:08
Доброй ночи) Моему другу очень нужна помощь Java-программиста. Поможете?)

Автор: LSD 23.3.2012, 14:23
Цитата(koshkajm @  23.3.2012,  00:08 Найти цитируемый пост)
Доброй ночи) Моему другу очень нужна помощь Java-программиста. Поможете?)

Друг настолько стеснительный, что стесняется сам спросить? smile

Автор: koshkajm 24.3.2012, 11:07
У него доступа к интернету нет) А очень надо узнать про программиста:)

Автор: Karadul 24.3.2012, 12:38
А как он эту помощь собирается получать - по телефону? И собирается ли он ее оплачивать?

Автор: koshkajm 25.3.2012, 10:26
Да, по телефону. И, конечно же, собирается оплачивать) Разве сейчас что-то бесплатно бывает?)

Автор: Samotnik 25.3.2012, 18:55
Цитата(koshkajm @  25.3.2012,  10:26 Найти цитируемый пост)
Разве сейчас что-то бесплатно бывает?) 

бывает  smile 

Автор: Karadul 25.3.2012, 20:08
Но не по телефону.

Автор: LSD 26.3.2012, 09:57
Есть вопрос - создай новую тему, где и напиши в чем проблема. А здесь хватит флудить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)