Старый способ имитации "перечисления":
public static final int TOM = 1;
public static final int JERRY = 1;
public static final int REX = 1;
Новое, перечисление:
public enum Names {
BOBBY, BILLY, SOFFIE
}
Так в чем отличие? Зачем сделали перечисления "Enum"?
Описание enum
-- это, по сути дела, описание класса и одновременно фиксированного набора именованных объектов этого класса. Объекты этого класса могут обладать всеми атрибутами обычных объектов -- конструкторами, полями, методами. Конструкторы могут инициализировать внутренние состояния этих объектов, поля -- хранить их состояния, в том числе ссылки на какие-то более/менее сложные объекты, методы могут реализовать какую-то функциональность.
Так что перечисление -- это не просто набор значений, которые можно использовать в операторе switch
, их возможности намного больше.
С помощью перечислений можно, например, описать набор команд GUI -- каждая команда может иметь состояние (разрешено/запрещено), текст, отображаемый в меню и зависящий от состояния, текст всплывающей подсказки, ссылку на объект, который выполняет команду и т. п. Другой пример -- описание колонок таблицы, с информацией о ширине колонки, о том, как форматировать данные в этой колонке и проч., или параметры, определяющие режим работы приложения.
Да вообще много разных применений может быть, во многих случаях, когда количество разных объектов какого-то типа известно заранее. Грамотное использование перечислений может сильно улучшить дизайн приложения. Так что использование их просто в качестве именованных констант -- далеко не главное их применение. Вот навскидку пример того, что можно делать с перечислениями:
public class Test_enums_2 {
static class EnumData {
int intValue;
String stringValue;
EnumData(int intValue, String stringValue) {
this.intValue = intValue;
this.stringValue = stringValue;
}
void setNewString(String s) { this.stringValue = s; }
public String toString() { return intValue + ": " + stringValue; }
int calcSomething() { return intValue * stringValue.length(); }
// Anything else...
}
enum EnumExample {
ENUM1_ITEM1(1, "Раз"),
ENUM1_ITEM2(2, "Два"),
ENUM1_ITEM3(3, "Три"),
ENUM1_ITEM4(4, "Четыре");
private EnumData data;
private boolean enabled = true;
EnumExample(int intValue, String stringValue) {
data = new EnumData(intValue, stringValue);
}
public void setEnabled(boolean newValue) {
enabled = newValue;
}
public void setString(String newValue) {
data.stringValue = newValue;
}
public String getFullName() {
if (!enabled) return "Ничего не скажу. Запрещено";
else return data.toString();
}
public String getShortName() {
return String.valueOf(data.intValue);
}
public int calculate() {
return data.calcSomething();
}
}
public static void main(String[] args) {
EnumExample.ENUM1_ITEM3.setEnabled(false);
for (EnumExample item: EnumExample.values()) {
System.out.format("%s: Short name: %s, full name: %s, calc: %s\n",
item, item.getShortName(),
item.getFullName(), item.calculate());
}
System.out.println();
EnumExample.ENUM1_ITEM1.setString("Ку-ку");
EnumExample.ENUM1_ITEM2.setEnabled(false);
EnumExample.ENUM1_ITEM3.setEnabled(true);
for (EnumExample item: EnumExample.values()) {
System.out.format("%s: Short name: %s, full name: %s, calc: %s\n",
item, item.getShortName(),
item.getFullName(), item.calculate());
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как убрать фон кнопки так, чтобы осталось только одно изображение? Сама иконка 16x16
Вот есть код, который выводит список объектовМне нужно что бы он при выводе сортировался по названию поля
Такой нубовский вопросС помощью паттерна Memento (знаю что устарел но так по заданию) сделать так, чтоб при выходе из графического редактора,...