Руководство Java Enum
1. Что такое Java Enum?
enum в Java является ключевым словом, свойство которое используется чтобы представить фиксированное число. Например день недели, планета в Солнечной системе и т.д.
enum в Java был представлен в JDK 1.5 и является новым свойство в J2SE 5 с autoboxing и unboxing, Generics, varargs и static import.
enum в Java был представлен в JDK 1.5 и является новым свойство в J2SE 5 с autoboxing и unboxing, Generics, varargs и static import.
Теперь, нам нужно посмотреть до того как появился enum, что делала java в определенных случаях:
WeekDayConstants.java
package org.o7planning.tutorial.beforej5;
// This class defines the constants are the days of the week.
public class WeekDayConstants {
public static final int MONDAY = 2;
public static final int TUESDAY = 3;
public static final int WEDNESDAY = 4;
public static final int THURSDAY = 5;
public static final int FRIDAY = 6;
public static final int SATURDAY = 7;
public static final int SUNDAY = 1;
}
Класс с симулированным методом возвращает название работы соответствующей дню недели. (Как расписание).
Timetable.java
package org.o7planning.tutorial.beforej5;
public class Timetable {
// Returns name of Job will do
public static String getJob(int dayInWeek) {
if (dayInWeek == WeekDayConstants.SATURDAY
|| dayInWeek == WeekDayConstants.SUNDAY) {
return "Nothing";
}
return "Coding";
}
}
Это понятно, что такой код небезопасен. Например когда вы нечаянно вводите совпадающие значения для дней недели. Или вызывате функцию Timetable.getJob(int), но вводите значения непринадлежащие предопределенным значениям.
- Небезопасный вид: Для начала, это небезопасный вид, вы можете вызвать метод getJob(int) и ввести любое значение int.
- Не имеет значения в распечатке: Если вы хотите распечатать дни недели, то это будут числа вместо слов со значением, например "MONDAY".
И это код обработки в Java5:
WeekDay.java
package org.o7planning.tutorial.javaenum;
public enum WeekDay {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
Timetable.java
package org.o7planning.tutorial.javaenum;
public class Timetable {
public static String getJob(WeekDay weekDay) {
if (weekDay == WeekDay.SATURDAY || weekDay == WeekDay.SUNDAY) {
return "Nothing";
}
return "Coding";
}
}
2. Можно использовать оператор == для сравнения элементов enum
Enum это ссылочный объект как класс, интерфейс, но можно использовать так же как сравнение ==.
Посмотрим как сравнивают ссылочные объекты:
// To compare the reference object, generally used method equals (..)
Object obj1 = .... ;
// Comparing object with null, can use the == operator
if(obj1 == null) {
}
Object obj2 = ....;
// Not null
if (obj1 != null) {
// Comparing two objects.
if(obj1.equals(obj2)) {
}
}
С Enum, вы можете использовать оператор == для сравнения.
CompareEnumDemo.java
package org.o7planning.tutorial.javaenum;
public class CompareEnumDemo {
public static void main(String[] args) {
WeekDay today = WeekDay.SUNDAY;
// Use the == operator to compare two elements of Enum
if (today == WeekDay.SUNDAY) {
System.out.println("Today is Sunday");
}
}
}
3. Enum можно использовать как параметр в команде switch
Так же как примитивные виды данных (int,float,..) Enum может использовать некоторые параматры в команде switch.
Посмотрим пример:
Посмотрим пример:
SwitchDemo.java
package org.o7planning.tutorial.javaenum;
public class SwitchDemo {
public static void main(String[] args) {
WeekDay day = WeekDay.THURSDAY;
switch (day) {
case MONDAY:
System.out.println("Working day");
break;
case SATURDAY:
case SUNDAY:
System.out.println("Holiday");
break;
default:
System.out.println(day);
}
}
}
4. Получение элементов Enum
Мы можем получить все элементы Enum, используя метод values(). Смотрите иллюстрацию:
ValuesDemo.java
package org.o7planning.tutorial.javaenum;
public class ValuesDemo {
public static void main(String[] args) {
// Get all the elements of the Enum.
WeekDay[] allDays = WeekDay.values();
for (WeekDay day : allDays) {
System.out.println("Day: " + day);
}
}
}
Результаты запуска примера:
Day: MONDAY
Day: TUESDAY
Day: WEDNESDAY
Day: THURSDAY
Day: FRIDAY
Day: SATURDAY
Day: SUNDAY
5. Enum может иметь конструктор и метод
Enum может иметь кострукторы и методы. Конструкторы для инициализации объектов внутри enum, невозможно вызвать снаружи. Давайте посмотрим иллюстрированный пример:
Gender.java
package org.o7planning.tutorial.javaenum;
public enum Gender {
// Initialize the elements from Constructor.
// The element is always final, static
MALE("M", "Male"), FEMALE("F", "Female");
private String code;
private String text;
// Constructor of Enum internal use only
// Modifier of constructor is private
// If you do not declare private, java alway understand is private.
private Gender(String code, String text) {
this.code = code;
this.text = text;
}
// Static method return Gender by code.
public static Gender getGenderByCode(String code) {
for (Gender gender : Gender.values()) {
if (gender.code.equals(code)) {
return gender;
}
}
return null;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
GenderDemo.java
package org.o7planning.tutorial.javaenum;
public class GenderDemo {
public static void main(String[] args) {
Gender marryGender = Gender.FEMALE;
System.out.println("Code: " + marryGender.getCode());
System.out.println("Text: " + marryGender.getText());
// Gender[].
for (Gender gender : Gender.values()) {
System.out.println(gender.getText());
}
String code ="M";
Gender gender= Gender.getGenderByCode(code);
System.out.println("Gender by code: "+ gender);
}
}
Результаты запуска примера:
Code: F
Text: Female
Male
Female
Gender by code: MALE
6. Переопределить метод в Enum
Вы можете переопределить метод toString() унаследованный от класса Object.
Currency.java
package org.o7planning.tutorial.javaenum;
public enum Currency {
VND, USD, EURO ;
@Override
public String toString() {
if (this == VND) {
return "Dong";
} else if (this == USD) {
return "Dola";
}
return super.toString();
}
public static void main(String[] args) {
Currency money = Currency.USD;
System.out.println("Money " + money);
System.out.println("Money " + money.toString());
System.out.println("VND " + Currency.VND);
System.out.println("EURO " + Currency.EURO);
}
}
Результаты запуска примера:
Money Dola
Money Dola
VND Dong
EURO EURO
7. Абстрактный метод в Enum
Color.java
package org.o7planning.tutorial.javaenum;
public enum Color {
RED("red") {
@Override
public String getHexCode() {
return "#ff0000";
}
},
GREEN("green") {
@Override
public String getHexCode() {
return "#00ff00";
}
},
BLUE("blue") {
@Override
public String getHexCode() {
return "#0000ff";
}
};
private String name;
Color(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract String getHexCode();
}
Java Basic
- Настройте java compiler для обработки вашего Annotation (Annotation Processing Tool)
- Программирование на Java для группы с помощью Eclipse и SVN
- Руководство Java WeakReference
- Руководство Java PhantomReference
- Сжатие и декомпрессия в Java
- Настройка Eclipse для использования JDK вместо JRE
- Методы String.format() и printf() в Java
- Синтаксис и новые функции в Java 8
- Регулярные выражения Java
- Руководство Java Multithreading Programming
- Библиотеки Java JDBC Driver для различных типов баз данных
- Руководство Java JDBC
- Получить значения столбцов, автоматически возрастающих при вставлении (Insert) записи, используя JDBC
- Руководство Java Stream
- Руководство Java Functional Interface
- Введение в Raspberry Pi
- Руководство Java Predicate
- Абстрактный класс и Interface в Java
- Модификатор доступа (Access modifiers) в Java
- Руководство Java Enum
- Руководство Java Annotation
- Сравнение и Сортировка в Java
- Руководство Java String, StringBuffer и StringBuilder
- Обработка исключений Java - Java Exception Handling
- Руководство Java Generics
- Манипулирование файлами и каталогами в Java
- Руководство Java BiPredicate
- Руководство Java Consumer
- Руководство Java BiConsumer
- Что мне нужно для начала работы с Java?
- История Java и разница между Oracle JDK и OpenJDK
- Установить Java в Windows
- Установите Java в Ubuntu
- Установите OpenJDK в Ubuntu
- Установить Eclipse
- Установите Eclipse в Ubuntu
- Быстрое изучение Java для начинающих
- История бит и байтов в информатике
- Типы данных в java
- Битовые операции
- Команда if else в Java
- команды switch в Java
- Циклы в Java
- Массивы (Array) в Java
- JDK Javadoc в формате CHM
- Наследование и полиморфизм в Java
- Руководство Java Function
- Руководство Java BiFunction
- Пример Java encoding и decoding с использованием Apache Base64
- Руководство Java Reflection
- Java Удаленный вызов методов - Java RMI
- Руководство Программирование Java Socket
- Какую платформу я должен выбрать для разработки приложений Java Desktop?
- Руководство Java Commons IO
- Руководство Java Commons Email
- Руководство Java Commons Logging
- Понимание Java System.identityHashCode, Object.hashCode и Object.equals
- Руководство Java SoftReference
- Руководство Java Supplier
- Аспектно-ориентированное программирование Java с помощью AspectJ (AOP)
Show More
- Руководства Java Servlet/JSP
- Руководства Java Collections Framework
- Java API для HTML, XML
- Руководства Java IO
- Руководства Java Date Time
- Руководства Spring Boot
- Руководства Maven
- Руководства Gradle
- Руководства Java Web Services
- Руководства Java SWT
- Руководства JavaFX
- Руководства Oracle Java ADF
- Руководства Struts2 Framework
- Руководства Spring Cloud