Копирующий конструктор. Как правильно?

 
0
 
Java
ava
smartchecker | 02.10.2013, 13:51
Есть Arraylist из неких объектов.

ArrayList<Triad> triadList = reader.getTriadList();

Мне нужна копия этого list'а, но чтобы в копии были новые объекты, а не ссылки на объекты из первого.

ArrayList<Triad> otherTriadList = new ArrayList<Triad>(triadList);

Не работает.

Означает ли это что я должен написать в Triad копирующий конструктор или ещё что-нибудь?
Как это правильно реализовать?
Comments (5)
ava
danilych | 02.10.2013, 13:16 #
Да, все верно думаете. Нужно создать копию каждого объекта и поместить ее в ArrayList
ava
smartchecker | 02.10.2013, 13:21 #
Цитата (danilych @ 2.10.2013,  13:16)
Да, все верно думаете. Нужно создать копию каждого объекта и поместить ее в ArrayList

Если объект Triad содержит, ещё и другие самописные объекты, то для них, тоже надо реализовывать копирующие конструкторы?
И есть ли где-нибудь внятный пример, чтобы посмотреть?
Как в итоге будет выглядеть код для копирования ArrayList'а?
ava
Stolzen | 02.10.2013, 13:36 #
Самым простым решением в вашем случае может быть сереализовать весь список, а потом десереализовать.

Цитата (smartchecker @  2.10.2013,  14:21 findReferencedText)
Если объект Triad содержит, ещё и другие самописные объекты, то для них, тоже надо реализовывать копирующие конструкторы?

Да.

Внятный пример можете попробовать поискать в Effective Java, вроде там что-то подобное было в Item-е про clone.
ava
LSD | 02.10.2013, 15:21 #
Цитата (smartchecker @  2.10.2013,  14:21 findReferencedText)
Если объект Triad содержит, ещё и другие самописные объекты, то для них, тоже надо реализовывать копирующие конструкторы?

Если они mutable.


В принципе есть техника глубокого копирования через сериализацию, но это неэффективно с точки зрения производительности лучше копирующий конструктор.
ava
GreenTea22 | 02.10.2013, 20:43 #
Можно так же использовать копирование одного обьекта в другой через рефлексию. Как это делает например http://dozer.sourceforge.net/
Но если у вас не большой проект и не хотите заморачиваться с таким монстром как дозер, то самое простое решение написать копирующий конструктор.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit