![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| PrinceOFF |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 21.10.2013 Где: Минск, РБ Репутация: нет Всего: нет |
Изучаю Шилдта "Java. Полное руководство. 8-е издание". В главе 7 (стр.170) описан метод передачи объекта конструктору с пояснением:
И на этом собственно все пояснение... Код:
И кусок кода главного класса:
В данном примере рассматриваемый метод позволяет выводить значения клона mybox1 - это как бы мне понятно, хотя тело конструктора и вызывает некоторое невосприятие моим, пока еще, мышлением не программиста. Собственно, я никак не могу понять для чего реально используется этот метод в реальных задачах при программировании? Может быть кто-то использует данный метод в своей работе (и как часто он действительно применяется на практике?) и сможет мне привести пример и объяснить на пальцах? |
||||||
|
|||||||
| jManiak |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 6.2.2007 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Правильно делаете, что сомневаетесь в таком подходе. Честно говоря не могу придумать задачи, где именно так нужно было бы ее решать.
А вообще, "все уже написано за нас": есть такая замечательная штука как Интерфейс Cloneable |
|||
|
||||
| jelum |
|
|||
|
Unregistered |
К примеру, тебе надо нарисовать одинаковые кнопки, которые отличаются только расположением. ты можешь создать эталонную кнопку, а потом копированием сделать остальные. В остальных же тебе надо будет только изменить координаты расположения. Копировать ты можешь передавая конструктору кнопки эталон.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
| PrinceOFF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 21.10.2013 Где: Минск, РБ Репутация: нет Всего: нет |
Подождал... Но два, полярных ответа так и остались...
Вобщем, приму наличие метода как данность, спасибо. |
|||
|
||||
| Magistrus |
|
|||
![]() Жив ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 14.6.2006 Где: г. Одесса Репутация: нет Всего: 1 |
Такое решение эффективно только в случае, если поля клонируемого объекта представляют собой значения базовых типов и их оболочек или неизменяемых (immutable) объектных типов. Если же поле клонируемого типа является изменяемым объектным типом, то для корректного клонирования требуется другой подход.
Пример:
Вывод: Если имеещь класс с простыми типами и необходимо создать много одинаковых объектв по шаблону, можно использовать конструктор копирования. Если же у тебя объект с сылочными типами которые имеют сложную иерархическую структуру и свои реализованные методы копирования, то лучше реализовать в своем классе метод clone. Это сообщение отредактировал(а) Magistrus - 20.11.2013, 10:30 --------------------
~ вот такая вот загагулина ~ |
|||
|
||||
| PrinceOFF |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 21.10.2013 Где: Минск, РБ Репутация: нет Всего: нет |
Ну вот, реальный пример!
Только есть несколько вещей мне не понятныйх... 1. Что такое "Dimension size"? Ниже по коду в комментариях написано, что это класс. Тогда почему он так странно обозначен?
2. Слышал уже давно про геттеры и сеттеры, но почему-то у Шилдта про это ни слова ни сказано...((( Либо, может это будет где-то позже, хотя начал искать в оглавлении - ничего не нашел... Это как раз и есть, т.н. геттер?:
На первый взглад, смутно понимаю, что мы объекту size (хотя, это по сути переменные нашего объекта Box) класса Demension задаем значения ширины и высоты, но поскольку это какая-то незнакомая мне конструкция, все крайне размыто... Я так понимаю, что этими геттерами удобно пользоваться, если так много людей их применяет. Может быть кто-то подскажет теоретически в какой главе Шилдта может быть растолковано про эти методы? Другой литературой пользоваться не хотелось бы... Особенно, Хорстманом...((( С другой стороны, логично предположить, что если Шилдт, не посчитал нужным включить информацию по этим методам (на данном этапе), то значит они сейчас мне как бы и не надо... 3. Почему в таком случае, не включить в этот метод и параметр глубины? Либо эти геттеры не позволяют это сделать? P.S. Если эти вопросы кажутся детскими - то так оно и есть |
||||
|
|||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
PrinceOFF, отвечу на первый пост.
Это - конструктор копирования. На мой взгляд он лучше метода clone: 0. Можно передавать параметры 1. Не нужно обрабатывать странное исключение CloneUnsupportedException 2. Не нужно менять спецификатор доступа 3. внутри можно использовать при необходимости условия. 4. Просто намного проще и понятнее. Для чего реально использовать? Например, есть у тебя сайт с объявлениями. Владелец может менять свое объявление сколько угодно раз и оно не должно показывать пользователям до прохождения модерации, но старая версия должна быть доступна всегда. Вот тут я и использовал конструктор копирования. Брал объявление, копировал его (делал клон в БД). Старое показывал всем, а редактируемое только владельцу и модератору. |
|||
|
||||
| Pawl |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Да, это класс, в переводе "размерность", т. е. длина и ширина. Его ввели для демонстрации клонирования объектов. Поскольку ваш вопрос касался только конструктора копирования, на который ответ тут уже дан, можете пока не заморачиваться на клонировании объектов. Кстати, у Шилда есть про клонирование объектов, когда рассматривается библиотека java.lang.
геттеры и сеттеры - методы для получения и изменения private-переменной:
подробнее разберетесь с этим, когда будете читать про методы. Напомнило анекдот: Выносит новый батюшка прихожанам книгу - что, братие, читал ли вам сию книгу прежний батюшка? - читал, отче, хорошо ее знаем! - ну, раз знаете, то и читать вам ее не нужно... На другой день выносит другую книгу - а сию книгу читал ли вам прежний батюшка? - нет, отче, не читал! - ну, раз не читал, то и знать вам ее не нужно! Я это к тому, что Шилд - не догма. Безусловно, хорошо пишет, он тоже был моей первой книгой по java, но и в других книгах тоже есть зёрна истины! Это сообщение отредактировал(а) Pawl - 20.11.2013, 09:46 -------------------- В действительности всё совсем не так, как на самом деле |
||||||
|
|||||||
| PrinceOFF |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 21.10.2013 Где: Минск, РБ Репутация: нет Всего: нет |
Samotnik, спасибо, пример понял.
Pawl, анекдот хороший - смеялся |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |