Реализация clone, equals, hashCode, compareTo, toString
|
|
CHerry | Дата: Понедельник, 2013-06-10, 16:24:21 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 141
Статус: Offline
| clone() - создание локальной копии объекта. Это защищенный (protected) метод базового класса Object - создаем метод и переопределяем его как public
- добавляем обязательный вызов метода super.clone()
- делаем "поверхностное копирование:
Код public MyClass clone() { Object object = null; try { object = super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return (MyClass) object; } - добавляем в сигнатуру нашего класса реализацию implements Cloneable это фактически метку, о том что наш класс может быть клонируемым
- Далее выполняем "глубокое копирование" - производим копирование ссылок для составляющих его объектов, а затем, в свою очередь, для ссылок этих объектов и так далее.
Код Male male = new Male(); male.setAge(getAge()); male.setName(getName()); male.setSalaryArray(getSalaryArray().clone());
|
|
| |
CHerry | Дата: Вторник, 2013-06-11, 00:42:18 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 141
Статус: Offline
| Требования к реализации equals() и hashCode() В частности, метод equals() должен обладать следующими свойствами: - Симметричность: Для двух ссылок, a и b, a.equals(b) тогда и только тогда, когда b.equals(a)
- Рефлексивность: Для всех ненулевых ссылок, a.equals(a)
- Транзитивность: Если a.equals(b) и b.equals©, то тогда a.equals©
- Совместимость с hashCode(): Два тождественно равных объекта должны иметь одно и то же значениеhashCode()
Обязательное правило: если переопределил equals — то переопредели и hashCode.
Код
public int MyHashCode() { int hashCode = 5 + Arrays.hashCode(salaryArray); if (isPlayHockey) { hashCode += 1; } return hashCode; }
|
|
| |