| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Cloneable |
| Автор: Fieral 9.6.2009, 19:09 | ||
| например: я написал инетфейс MyList<E> extends Cloneable затем написал класс MyListClass<E> implements MyList<E>,Cloneable у которого даже есть метод public Object clone() а теперь я хочу скопировать: MyList<Integer> value;
и тут внезапно выясняется что сделать это нельзя потому что у интерфейса Cloneable вообще нет никаких методов. тоесть придётся писать свой интерфейс MyCloneable с блекджеком и шлюхами в котором этот метод есть, и расширять MyList от него зачем вообще тогда нужен java.lang.Cloneable? |
| Автор: Girin 9.6.2009, 19:30 |
| Cloneable это интерфейс-маркер, служит гарантией того что в классе реализующем данный интерфейс будет переопределен метод clone(). В классе Object метод clone() является защищенным, т.е. использовать непосредственно его нельзя. Такие интерфейсы еще используются для проверки типа с помощью оператора instanceof http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Cloneable.html |
| Автор: Fieral 9.6.2009, 19:38 | ||||
ну а почему java.lang.Cloneable не выгдядит так?
Добавлено через 58 секунд это както служит большей гарантией того что в классе реализующем данный интерфейс будет переопределен метод clone() чем:
|
| Автор: SoulKeeper 9.6.2009, 19:42 |
| Спросите у Sun |
| Автор: Fieral 10.6.2009, 14:17 |
| сначала у меня была версия что логика работы Clonable устроена по аналогии с Serializable: где класс сериализуем <=> он помечен как Serializable и содержит только Serializable поля но там есть некий внешний сериализатор, а тут? как склонировать класс "спрятанный" за интерфейс? |
| Автор: serger 10.6.2009, 14:37 |
| Тут мысли: http://xpoint.ru/forums/programming/java/thread/36462.xhtml#334230 Тут разжёвано: http://www.uic.rsu.ru/doc/programming/java/TIJ2e.ru/AppendixA.html |
| Автор: LSD 10.6.2009, 17:14 | ||
Что-то я там не увидел ответа на вопрос: Мы сделали наш класс клонируемым, по контракту мы должны сделать метод clone() - public. Так почему нельзя было добавить clone() в интерфейс, чтобы можно было писать:
Мое личное мнение, что это просто недоработка Sun. Сейчас же добавить этот метод нельзя, т.к. может перестать работать куча старого кода. |