Java HashMap - глубокая копия

Я просто пытаюсь найти лучшее решение, как сделать глубокую копиюHashMap, На этой карте нет объектов, которые реализуютCloneable, Я хотел бы найти лучшее решение, чем сериализация и десериализация.

 Smolda24 окт. 2012 г., 16:46
Я согласен с вами, но в данный момент нет выхода .. так как это не мое никогда .. :(
 amit24 окт. 2012 г., 14:37
Попытка клонировать объекты, которые не являются Клонируемыми, является определенным запахом кода. Это будет хорошее время, чтобы подумать о рефакторинге.
 Hot Licks24 окт. 2012 г., 14:35
Чьи это классы объектов? Если ваш собственный, просто добавьте Cloneable.
 Smolda24 окт. 2012 г., 14:46
Объект, который необходимо скопировать, генерируется автоматически. Я не могу изменить этот объект. У меня есть карта <Строка, Объект> который я понятия не имею, какие объекты он будет содержать.
 naXa21 окт. 2015 г., 15:19
Возможный дубликатНазначение Hashmap для Hashmap
 Bruno Grieder24 окт. 2012 г., 14:48
@Smolda - если вы не знаете, что это за объекты, то это пахнет: вы не можете гарантировать, что сможете клонировать: что это за объектtransient собственность, илиstream, так далее...
 Louis Wasserman24 окт. 2012 г., 18:53
Есть объекты, которые специально разработаны, чтобы вы моглиполучить больше, чем один из них. Выне могу делать копии произвольных объектов. Найди другой путь.
 Bruno Grieder24 окт. 2012 г., 14:41
Если объекты являются неизменяемыми, вам вряд ли нужно / следует их клонировать. Они?
 Matt Whipple24 окт. 2012 г., 14:32
Так что это больше вопрос о том, как клонировать неклонируемые объекты? HashMap кажется незначительной деталью, которую можно решить с помощью простой рекурсии

Ответы на вопрос(2)

Решение Вопроса

Глубокое клонирование, в Google Code вы можете найти библиотеку. Вы можете прочитать это наhttps://github.com/kostaskougios/cloning.

Как это работает легко. Это может клонировать любой объект, и объект не должен реализовывать какие-либо интерфейсы, например, сериализуемые.

Cloner cloner = new Cloner();
MyClass clone = cloner.deepClone(o);
// clone is a deep-clone of o

Однако помните: это может клонировать тысячи объектов (если клонированный объект имеет столько ссылок). Кроме того, копирование файлов или потоков может привести к сбою JVM.

Однако вы можете игнорировать некоторые экземпляры классов, такие как streams и так далее. Это'Стоит проверить эту библиотеку и ее источник.

 Junjie21 нояб. 2017 г., 15:00
Какая замечательная библиотека!
 stealthjong23 сент. 2015 г., 11:53
@zengr Да, он все это скопирует.
 zengr23 сент. 2015 г., 00:39
Будет ли он глубоко копировать объект и все его вложенные элементы? Скажем, у Object1 есть Object2, у Object2 есть карта <Строка, Obj3>, Когда я делаюcloner.deepClone(Object1);Будет ли это глубоко копировать все?

Если у вас есть возможность просто внедрить клон, яЯ бы пошел по этому пути.Немного сложнее создать карту типов, где вы ищите некоторый класс имплантации клонов, основанный на классе каждого объекта.Когда объекты могут образовывать направленный ациклический граф, яв общем, держу карту от оригинала до клона каждого объекта, который якогда-нибудь видел, и проверь,мы уже сделали этоКогда у вас есть общий график, проблема становится действительно неприятной. У вас могут быть странные ограничения порядка создания объектов, это может быть даже невозможно при наличии последних полей.

Сейчас ябуду предлагать переписать ваш вопрос в менее общем виде

 zengr23 сент. 2015 г., 00:32
Дон»реализовать клонartima.com/intv/bloch13.html

Ваш ответ на вопрос