Java: Вопросы по методу клонирования - PullRequest
2 голосов
/ 14 ноября 2011

Я читаю Эффективную Java, и в книге есть комментарий к методу клонирования ниже.

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

Может ли кто-нибудь привести примерыпочему это не может быть сделано?

Ответы [ 4 ]

3 голосов
/ 14 ноября 2011

Представьте, что один из базовых классов имеет закрытое поле, которое должно быть скопировано особым образом, чтобы "клон" был семантически действительным.

Если этот базовый класс не обеспечивает правильную реализацию клона,производный класс тоже не может - у него нет возможности правильно построить это приватное поле.

1 голос
/ 14 ноября 2011

В основном, если часть вашей иерархии классов включает в себя класс, который не находится под вашим контролем и не является частью JDK (т. Е. Стороннего класса с закрытым исходным кодом), и этот класс не реализует корректное поведение clone() метод, тогда не будет особенно легко произвести один.

0 голосов
/ 14 ноября 2011
`@override
public MyClass clone(){

Myclass clonedObj = super.clone(); // This is why the classtree all needs to be cloneable

// now copy values of all members to the new obj.
// be carefull to not copy references
clonedobj.setMyMember(this.getMyMember()); // copy of member var;
clonedobj.setMyotherMember(this.getMyOtherMember().clone()); // a composit obj must be cloned.

}
`

это может быть ответом?

0 голосов
/ 14 ноября 2011

Во многих случаях класс обычно пишется с не реализованным клоном.Таким образом, когда написан дочерний класс, он также написан с клоном, не являющимся частью.В какой-то момент требуется написать метод клонирования в дочернем классе, но у родителей его нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...