Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Cloneable, в чем его сокральный смысл? 
:(
    Опции темы
Fieral
Дата 9.6.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



например:
я написал инетфейс MyList<E> extends Cloneable
затем написал класс MyListClass<E> implements MyList<E>,Cloneable у которого даже есть метод public Object clone()

а теперь я хочу скопировать:

MyList<Integer> value;

Код

public MyList<Integer> getValueCopy() {
       return value.clone();
}


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

тоесть придётся писать свой интерфейс MyCloneable с блекджеком и шлюхами в котором этот метод есть, и расширять MyList от него

зачем вообще тогда нужен java.lang.Cloneable?

Это сообщение отредактировал(а) Fieral - 9.6.2009, 19:10
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
Girin
Дата 9.6.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 6.2.2008

Репутация: нет
Всего: нет



Cloneable это интерфейс-маркер, служит гарантией того что в классе реализующем данный интерфейс будет переопределен метод clone(). В классе Object метод clone() является защищенным, т.е. использовать непосредственно его нельзя. Такие интерфейсы еще используются для проверки типа с помощью оператора instanceof
Еще по теме
PM   Вверх
Fieral
Дата 9.6.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



ну а почему java.lang.Cloneable не выгдядит так?

Код

public class Cloneable{

              public Object Clone();

}


Добавлено через 58 секунд
это както служит большей гарантией того что в классе реализующем данный интерфейс будет переопределен метод clone() чем:

Код

public class Cloneable{

  
}


--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
SoulKeeper
Дата 9.6.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 11
Всего: 15



Спросите у Sun
PM MAIL   Вверх
Fieral
Дата 10.6.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



сначала у меня была версия что логика работы Clonable устроена по аналогии с Serializable:
где класс сериализуем <=> он помечен как Serializable и содержит только Serializable поля

но там есть некий внешний сериализатор, а тут? как склонировать класс "спрятанный" за интерфейс?

--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
serger
Дата 10.6.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5





--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
LSD
Дата 10.6.2009, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(serger @  10.6.2009,  14:37 Найти цитируемый пост)
Тут мысли:

Тут разжёвано:

Что-то я там не увидел ответа на вопрос:
Цитата(Fieral @  9.6.2009,  19:38 Найти цитируемый пост)
ну а почему java.lang.Cloneable не выгдядит так?


Мы сделали наш класс клонируемым, по контракту мы должны сделать метод clone() - public. Так почему нельзя было добавить clone() в интерфейс, чтобы можно было писать:
Код

if(a instanceof Cloneable)
{
  Cloneable c = (Cloneable) a;
  A a = (A) c.clone();
  ...
}


Мое личное мнение, что это просто недоработка Sun. Сейчас же добавить этот метод нельзя, т.к. может перестать работать куча старого кода.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.