LINUX.ORG.RU

Java Cloneable

 ,


0

1

Как обстоят дела с clone() в java в наши непростые дни?
Где-то слышал, что клонирование в java изначально сломано и пользоваться им не рекомендуют. Чинить тоже не собираются. И вообще название интерфейса индусы неправильно написали и теперь стесняются даже туда что-то писать.

Это досихпор так? Что же делать? Писать копи конструкторы во все поля?

★★★★

Где-то слышал, что клонирование в java изначально сломано и пользоваться им не рекомендуют. Чинить тоже не собираются.

Да. clone() есть, а клонирование ты должен писать руками.

Это досихпор так? Что же делать? Писать копи конструкторы во все поля?

Можешь использовать библиотеки: https://github.com/kostaskougios/cloning

asaw ★★★★★
()
Последнее исправление: asaw (всего исправлений: 1)

да, хуже того при копировании чего-то типа

Map m = new HashMap();
m.put(1, Collections.singleton(m));
m.clone();// тут будет весело

будет облом

Deleted
()
Ответ на: комментарий от Deleted

наверное, о клоне можно думать как о shellow-клонировании дата-классов типа pojo. Если не поджа и нужен deep-клонирование, трахайся сам, платформа никак не может помочь в таком случае

stevejobs ★★★★☆
()
Ответ на: комментарий от Deleted

а круто это тем, что jvm делает клон своей особой магией, копируя кусок рамы объекта. Наверняка никакой основанный на рефлекшене клон не сможет делать этого с такой скоростью! Пруфцов пока нет, интуиция

stevejobs ★★★★☆
()

Как обстоят дела с clone() в java в наши непростые дни?

Как обстояли, так и обстоят.

Где-то слышал, что клонирование в java изначально сломано и пользоваться им не рекомендуют. Чинить тоже не собираются. И вообще название интерфейса индусы неправильно написали и теперь стесняются даже туда что-то писать.

Ничего сломанного там нет.

Это досихпор так? Что же делать? Писать копи конструкторы во все поля?

Разберись, как работает клонирование и сам выбирай, что тебе нужно.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Разберись, как работает клонирование и сам выбирай, что тебе нужно.

Я знаю как работает клонирование и даже в состоянии оверрайднуть clone(), на случай отаке клонов. Слышал просто слухи о сломанности clone в java.

unt1tled ★★★★
() автор топика
Ответ на: комментарий от unt1tled

По мне так лучше не использовать. Никогда не приходилось. Чаще пишу код для клонирования руками, так надёжнее.

Главный косяк в том, что он возвращает Object - нужно явно приводить тип.

BattleCoder ★★★★★
()
Ответ на: комментарий от BattleCoder

Что тебе мешает оверрайднуть как

@Override MyClass clone() { return (MyClass) super.clone(); }

Legioner ★★★★★
()

Что же делать? Писать копи конструкторы во все поля?

Дождаться jdk9, выкинуть все legacy api и запилить свой jdk api with blackjack and hookers. Или дождаться того, кто возьмется за это нелегкое дело.

А пока можешь юзать фреймворки https://github.com/EsotericSoftware/kryo или https://github.com/kostaskougios/cloning

foror ★★★★★
()
Ответ на: комментарий от unt1tled

Слышал просто слухи о сломанности clone в java.

Он не сломан, просто он работает так как описано в документашке, а не так как можно подумать из названия.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.