Для пользователей, которые регистрируются. Если Вам не приходит письмо с подтверждением email, пишите на admin[at]quizful[dot]net - будем подтверждать вручную. Просим прощения за доставленные неудобства.

С уважением,
команда Quizful
Знаете ли Вы, что

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

Топ контрибуторов
loading
loading
Лента обновлений
ссылка May 17 19:13
Комментарий от elirijndael:
Полностью согласен с valid_name.
ссылка May 17 18:47
Комментарий от Aleksandr89:
Неплохой тест. Для тех кто хочет ещё попрактиковатьс...
ссылка May 17 15:13
Комментарий от dpdpdp:
Поменяйте радиокнопки на чекбоксы.
Во втором варианте про...
ссылка May 17 11:55
Комментарий от Torredo812:
вот это подвох!!!
забываешь что х увеличился))и думае...
ссылка May 17 10:50
Комментарий от lesha1980:
Хороший вопрос. Получается, что проверяется только x в...
Статистика

Тестов: 130, вопросов: 5791. Пройдено: 126752 / 526558.

Клонирование объектов

Автор: dehumanizer  к списку      

Вопрос
Зачем нужно клонирование и как его реализовать? Какой способ безопасней?
Ответ

0. Использование оператора присваивания не создает нового объекта, а лишь копирует ссылку на объект. Таким образом, две ссылки указывают на одну и ту же область памяти, на один и тот же объект.

Для создания нового объекта с таким же состоянием используется клонирование объекта.

1. Клонирование объекта можно реализовать, имплементировав интерфейс Cloneable и реализовав копирование состояний полей и агрегированных объектов. Такая реализация клонирования требует большого внимания и может стать источником ошибок.

2. Более безопасным способом является использование конструктора копирования, которое позволяет избежать многих проблем. Например:


class Foo {
  private int someInt;
  private String someString;

  // Getters & Setters
  
  public Foo(int val, String str) {
    someInt = val;
    someString = str;
  }

  // Copy constructor
  public Foo(Foo aFoo) {
    Foo(aFoo.getSomeInt(), aFoo.getSomeString());
  }

  // Another style
  public static Foo newInstance(Foo aFoo) {
    return new Foo(aFoo.getSomeInt(), aFoo.getSomeString());
  }
}

3. Другим безопасным вариантом является фабричный метод (Factory method), который представляет собой статический метод, возвращающий экземпляр своего класса.
Фабричный метод имеет следующие преимущества перед конструктором копирования:
- Имеет имя (чаще всего getInstance или valueOf), что делает код более понятным.
- Необязательно создавать новый объект в результате вызова: Объекты могут быть кэшированы и реиспользованы.
- Могут возвращать подтип своего возвращаемого типа. В частности, могут возвращать объект, у которого неизвестен класс реализации.

Если Вам понравился вопрос, проголосуйте за него

Голосов: 19  loading...
art   hestika   euuu   Elen_KL   Snova   silicon   grim   uniservise   megaboom   vicod   scherband   irina_zab74   mirash   sarah   pavelvolny   NepsOn   VasylZ   vkozak   ifa