protected final Object clone() throws
CloneNotSupportedException
Вызов этого метода приводит к генерации исключения типа CloneNotSupportedException. Это препятствует клонированию перечислимых типов
final int compareTo (E e)
Сравнивает порядковые номера двух констант одного перечислимого типа. Возвращает отрицательное значение, если у вызывающей константы порядковый номер меньше, чем у константы е, 0, если номера одинаковые, и положительное значение, если номер вызывающей константы больше номера константы е
final boolean equals(Object obj)
возвращает true, если вызывающий объект и переменная obj ссылаются на одну и ту же константу
final Class getDeclaringClass()
Возвращает перечислимый тип, членом которого является вызывающая константа
Вы можете получить порядковый номер константы перечислимого типа в списке констант. Его называют порядковым значением (ordinal value) и извлекают с помощью вызова метода ordinal(). Нумерация констант в списке начинается с 0. Таким образом, в перечислимом типе Apple у константы Jonathan нулевое порядковое значение, у константы GoldenDel оно равно 1, а у константы RedDel — 2 и т.д.
Существует возможность сравнения двух констант одного и того же перечислимого типа с помощью метода compareTo(), его сигнатура повторена в следующей строке:
final int compareTo (E e)
Важно понять, что и константа, вызывающая метод, и сравниваемая с ней константа должны принадлежать одному перечислимому типу. Если это условие нарушено, возникает ошибка на этапе компиляции. Если порядковое значение константы, вызывающей метод, меньше, чем у константы е, метод compareTo() вернет отрицательное значение. Если обе константы равны, метод возвращает 0. Если же порядковое значение у вызывающей метод константы больше, чем у константы е, возвращается положительное значение.
С помощью метода equals (), перегружающего метод equals() класса Object, Вы можете проверить равенство константы перечислимого типа любому другому объекту. Хотя метод способен сравнивать константу с объектом любого типа, равными будут считаться два объекта, ссылающиеся на одну и ту же константу в одном и том же перечислимом типе. В общем, если у двух констант одинаковые порядковые значения, но константы принадлежат разным перечислимым типам, метод equals() не вернет значение true.
Напоминаю о том, что Вы также можете проверять равенство двух констант с помощью операции = =.
Приведенная в листинге 6.5 программа демонстрирует применение методов ordinal(), compareTo() и equals () .
Листинг 6.5. Демонстрация методов ordinal(), compareTo() и equales()
enum Apple {
Jonathan, GoldenDel, RedDel, Winsap, Cortland
}
class EnumDemo4 {
public static void main(String args[])
{
Apple ap, ap2, ap3;
// Obtain all ordinal values using ordinal().
System.out.println("Here are all apple constants" +
" and their ordinal values: ");
for(Apple a : Apple.values())
System.out.println(a + " " + a.ordinal());
ap = Apple.RedDel;
ap2 = Apple.GoldenDel;
ap3 = Apple.RedDel;
System.out.println();
// Demonstrate compareTo() and equals()
if(ap.compareTo(ap2) < 0)
System.out.println(ap + " comes before " + ap2);
if(ap.compareTo(ap2) > 0)
System.out.println(ap2 + " comes before " + ap);
if(ap.compareTo(ap3) == 0)
System.out.println(ap + " equals " + ap3);
System.out.println();
if(ap.equals(ap2))
System.out.println("Error!");
if(ap.equals(ap3))
System.out.println(ap + " equals " + ap3);
if(ap == ap3)
System.out.println(ap + " == " + ap3);
}
}
Далее приведен вывод результатов работы программы из листинга 6.5:
Here are all apple constants and their ordinal values:
Jonathan 0
GoldenDel 1
RedDel 2
Winsap 3
Cortland 4
GoldenDel comes before RedDel
RedDel equals RedDel
RedDel equals RedDel
RedDel == RedDel
|