Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
 Аватар для Gibby
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1

Реализация метода clone

27.08.2013, 15:19. Показов 3973. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Читаю книгу J.Bloch - Effecitve Java. Не могу понять один абзац. Речь идет о контракте (general contract) метода clone.

Вот цитата целиком:

The provision that x.clone().getClass() should generally be identical to x.getClass(), however, is too weak. In practice, programmers assume that if they extend a class and invoke super.clone from the subclass, the returned object will be an instance of the subclass. The only way a superclass can provide this functionality is to return an object obtained by calling super.clone. If a clone method returns an object created by a constructor, it will have the wrong class. Therefore, if you override the clone method in a nonfinal class, you should return an object obtained by invoking super.clone. If all of a class’s superclasses obey this rule, then invoking super.clone will eventually invoke Object’s clone method, creating an instance of the right class. This mechanism is vaguely similar to automatic constructor chaining, except that it isn’t enforced.
И по пунктам:
The provision that x.clone().getClass() should generally be identical to x.getClass(), however, is too weak.
Что имеется в виду под "условие является слишком слабым"? Он должно быть сильнее в каком смысле? Контракт должен обязательно требовать, чтобы x.clone().getClass() == x.getClass() возвращало TRUE?

In practice, programmers assume that if they extend a class and invoke super.clone from the subclass, the returned object will be an instance of the subclass.
Программист ожидает, что, создав наследника и вызвав в нем super.clone() он получит в результате экземпляр наследника? Лично для меня это не интуитивно. Это такие правила клонирования в Java - просто идти вниз по методам clone пока не дойдете до Object, который все сделает за вас?

Тогда я правильно понимаю, что при такой схеме данных:

у меня будет вот такой механизм клонирования:

?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.08.2013, 15:19
Ответы с готовыми решениями:

Реализация метода сложения матриц
import javax.swing.JOptionPane; public class matrica { public int matriks; public int razmer; matrica(int n){ razmer=n; ...

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

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

6
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
27.08.2013, 19:22
имеется в виду что програмист не обязан имплементировать в цепочке наследования клонирование и это фигово, так как ты не можешь надеяться, что вызвав super.clone ты получишь клона
0
 Аватар для Gibby
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
28.08.2013, 14:31  [ТС]
Да, но если в классе-предке не реализован clone() - мы сразу получим ошибку компиляции. Проблема будет, если мы не можем менять этот класс - это да.

Я правильно понимаю, что основная причина, по которой в интерфейсе Cloneable нет метода clone в том, что в каждом классе тип возвращаемого значения свой? Они не могли сделать public Object clone() ?

Добавлено через 17 минут
Судя по тому, что сейчас в Java ввели ковариантность типов возвращаемых значений, они вполне бы могли сделать public Object clone(). Это, я так понимаю, артефакт предыдущих версий? А поменять интрефейс они не могут, потому что на такой работе интерфейся уже завязана куча программ, которые придется переписывать?

Кстати, википедия говорит, что ковариантность в Java была реализована частично. В каком смысле?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
28.08.2013, 16:36
просто реализовать клон не всегда возможно в принципе, особенно когда в классе есть внешние ресурсы, типа соединений и потоков

а интерфейс он как маркер чтобы jvm не пугалась что ты повышаешь уровень скрытия метода clone )))
0
 Аватар для Gibby
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
28.08.2013, 16:58  [ТС]
mutagen, так а в чем проблема? Не можешь реализовать clone - не подключай интерфейс.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
29.08.2013, 10:44
не все классы сериализуемы, не все классы клонабельны, для этого и существуют интерфейсы маркеры
скажем так чтобы помирить жестокую реальность с попыткой создать идеализированную среду для абстракций
0
 Аватар для Gibby
154 / 154 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
30.08.2013, 13:40  [ТС]
Здоровенная глава про метод clone заканчиватся фразой вроде "Во всех возможных случаях желательно метод clone() не переопределять и интерфейс Cloneable не реализовывать. Есть более нормальные, человеческие методы копирования объектов". Ну здорово
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.08.2013, 13:40
Помогаю со студенческими работами здесь

Реализация метода записи результата в файл
ребята нужна помощь в реализации метода записи в файл результата(к примеру ответа сложенной матрицы.) package Matr; public class...

Реализация переменной\метода money в игре
Делаю магазин в игре. Scanner ent1 = new Scanner(System.in); double money; public void work(){ //// получил...

Перегрузка метода TreeNode Clone
public class GooseNode : TreeNode { public List<Param> ValsList=null; public GooseNode(List<Param>...

Нужно перевести программу из паскаль в делфи . Сама программа этот реализация метода гауса и метода зейделя
Это все в паскале сделано. В программе идет в начале описание меня а аотом сама подпрограмма реализации этих методов. В делфи надо сделать...

Программная реализация "Метода ветвей и границ" или "Метода Гомори"
Здравствуйте. Подскажите, пожалуйста, где можно скачать библиотеки, реализующие какой-нибудь из этих методов? Добавлено через 1 час 16...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru