Изменения

Перейти к: навигация, поиск

Перечисления

206 байт убрано, 19:31, 4 сентября 2022
м
rollbackEdits.php mass rollback
==Предыстория==
Программируя, мы часто сталкиваемся с необходимостью ограничить множество допустимых значений для некоторого типа данных. Так, например, день недели может иметь 7 разных значений, месяц в году - 12, а время года - 4. Для решения подобных задач во многих языках программирования со статической типизацией предусмотрен специальный тип данных - перечисление <tex>(enum)</tex>.
Данный тип данных появился в Java начиная с версии 1.5. (enum) предоставляет множество удобств как в компактности записи, так и в удобстве использования. Так же, по сравнениюв отличие, допустим, с от C++, перечисления в Java представляют собой полноценные объекты, что предоставляет разработчику гораздо большую гибкость.
==Введение ==
==Конструкция enum==
Начнем с примера. Давайте опишем с помощью enum тип данных для хранения оценки студентамер длины:
enum Unit { KILOMETER, METER, MILLIMETER }
METER {
public double getLength() { return 1; }
}; ,
MILLIMETER {
public double getLength() { return 0.001; }
•MILLIMETER - объект 3-го класса производного от Unit
Два производных класса будут созданы с полиморфным методом Object parse(String) и конструктором Unit(..., boolean). При этом объекты Объекты классов KILLOMETER, MILLIMETER и METER существуют в единственном экземпляре и доступны статически. В этом можно убедится:
System.out.println(Unit.class);
System.out.println(Unit.KILOMETER.getClass() + " " + Unit.KILOMETER.getClass().getSuperclass());
Результат будет следующим:
class Unit
class Unit ''$''1 class Unit class Unit ''$''2 class Unit class Unit ''$''3 class Unit
==Использование enum==
Но множество сравнений заняло бы много места.
Для этого мы используем <tex>switch</tex>, в результате чего у нас получится получается следующая запись:
switch (unit) {
}
В результате чего он выведет выдаст соответствующую меру длины. Так же можно употребить <tex>default</tex>, на тот случай, если вдруг другой программист добавил новые значения в Unit, а вас не предупредил. Поставив для варианта <tex>default</tex> вывод сообщения об отсутствии в списке значенияя значения unit, вы обнаружите это изменение.
===Получение елемента элемента enum по строковому представлению его имени===
Довольно часто возникает задача получить элемент enum по его строковому представлению. Для этих целей в каждом enum-классе компилятор автоматически создает специальный статический метод: public static EnumClass valueOf(String name), который возвращает элемент перечисления EnumClass с названием, равным name. Пример использования:
String name = "METER";
1632
правки

Навигация