Простое клонирование объектов
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

n Класс должен переопределять метод clone ()

n Класс должен реализовывать интерфейс-маркер Cloneable

n Результат клонирования должен быть получен вызовом super . clone ()

n Результатом работы метода Object . clone () является точная копия объекта

public Object clone() {

Object result = null;

try {

   result = super.clone();

} catch (CloneNotSupportedException ex) {

   throw new InternalError();

}

return result;

}

 

Особенности клонирования

int[][] a = {{1, 2, 3}, {4, 5,6}};

int[][] b = (int[][]) a.clone();

System.out.println(a[0][0]);

b[0][0] = 9;

System.out.println(a[0][0]);

n В результате клонирования скопировался только сам объект a, но не объект, на которые он ссылался

n При использовании результатов клонирования необходимо явное приведение типа

n Начиная с Java5 для массивов можно не выполнять явное приведение типа, но только для массивов

 

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

n Простого клонирования может быть недостаточно, если объект содержит ссылки на агрегированные объекты

n В этом случае после процедуры простого клонирования необходимо создать и их копии тоже

public Object clone() {

Object result = null;

try {

result = super.clone();

result.a = (...) a.clone();

...

} catch (CloneNotSupportedException ex) { }

return result;

}

 

 

Вопрос 56 Сравнение объектов. Хэш-функции. Интерфейс Comparable. 9-11, 13 Лекция Базовые и утилитные классы API JAVA

 

Равенство объектов

n Простого сравнения ссылок недостаточно для сравнения содержимого объектов

n Для сравнения объектов по их содержимому применяется метод equals ( Object obj )

n В классе Object метод реализован таким образом, что возвращает true только при сравнении с самим объектом

n Конкретный класс должен переопределять метод equals (...)

 

Равенство объектов

n Метод equals (...) должен проверять эквивалентность объектов с точки зрения бизнес-логики

n Отношение, задаваемое на множестве объектов этим методом, должно обладать следующими свойствами:

l рефлективность

l симметричность

l транзитивность

l консистентность

l сравнение с null должно приводить к результату false

 

Хэш-код объекта

n Метод int hashCode () предназначен для получения
хэш-кода – числа, используемого для быстрого сравнения объектов

n Если объект не изменял свое состояние, то значение хэш-кода не должно изменяться

n Если два объекта эквивалентны (с точки зрения метода equals ()), то хэш-коды объектов должны быть одинаковыми

n Если хэш-коды объектов одинаковы, то это еще не значит, что объекты эквивалентны

n Изменение реализации в классе метода equals () влечет за собой изменение реализации метода hashCode ()

 


Интерфейс Comparable

n Реализация интерфейса означает введение отношения порядка на множестве объектов класса

n Метод compareTo()

l a.compareTo(b) < 0 a < b

l a.compareTo(b) > 0 a > b

l a.compareTo(b) = 0 a = b

n Настоятельно рекомендуется согласовывать работу методов compareTo () и equals ()

 

 

Вопрос 57 Классы-обертки примитивных типов.14-17 Лекция Базовые и утилитные классы API JAVA

 

Классы-обертки примитивных типов

n Значения примитивных типов не могут быть непосредственно использованы в контексте, где требуется ссылка

n Ссылочное представление значений примитивных типов является основной задачей т.н. классов-оберток

n Экземпляр такого класса хранит внутри значение примитивного типа и предоставляет доступ к этому значению

 

Классы-обертки примитивных типов

n Boolean

n Byte

n Character

n Double

n Float

n Integer

n Long

n Number

n Short

n Void

 

Наполнение классов-оберток

 

n Константы типов Integer . MAX _ VALUE, Double . NaN

n Конструкторы: по значению и строке Float ( float value ), Float ( String s )

n Методы получения значения Boolean . booleanValue (), Float . floatValue ()

n Методы преобразования типов Integer . parseInt ( String s ), Float . byteValue ()

n Методы проверки состояния и вида значения compareTo (...), Double . isInfinite ()

n Специальные методы, обусловленные спецификой типа Double . longBitsToDouble (...), Integer . toHexString ()

 

Дата: 2019-07-30, просмотров: 194.