Enum trong java là một kiểu dữ liệu đặc biệt của Java được sử dụng để định nghĩa các tập hợp các hằng số. Cụ thể hơn, Java enum là một kiểu đặc biệt của lớp trong java. Một enum có thể chứa các trường, phương thức và Constructor.
Nó có thể được sử dụng để định nghĩa các ngày trong tuần (SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY), các mùa trong năm (SPRING, SUMMER, FALL, WINTER), ...
Java enum đã được thêm vào trong Java 5 cùng một số tính năng khác.
Nội dung chính
1. Enum trong java được định nghĩa ở đâu?
Enum trong java có thể được định nghĩa bên trong hoặc bên ngoài một lớp, vì nó tương tự như lớp trong java.
Ví dụ enum trong java: định nghĩa bên trong một lớp
package vn.kienthuclaptrinh.javaenum; public class EnumExample1 { // define enum enum Season { SPRING, SUMMER, FALL, WINTER; } public static void main(String[] args) { Season season = Season.WINTER; System.out.println(season); } }
Kết quả:
WINTER
Ví dụ enum trong java: định nghĩa bên ngoài một lớp
package vn.kienthuclaptrinh.javaenum; // define enum enum Season { SPRING, SUMMER, FALL, WINTER; } public class EnumExample2 { public static void main(String[] args) { Season season = Season.WINTER; System.out.println(season); } }
Kết quả:
WINTER
Ví dụ enum trong java: định nghĩa trong một file riêng biệt
File Season.java
package vn.kienthuclaptrinh.javaenum; public enum Season { SPRING, SUMMER, FALL, WINTER; }
File EnumExample3.java
package vn.kienthuclaptrinh.javaenum; public class EnumExample3 { public static void main(String[] args) { Season season = Season.WINTER; System.out.println(season); } }
Kết quả:
WINTER
2. Duyệt các phần tử trong enum
Dưới đây là ví dụ đơn giản về việc duyệt các phần tử enum trong java:
package vn.kienthuclaptrinh.javaenum; public class EnumExample4 { // define enum Season public enum Season { SPRING, SUMMER, FALL, WINTER } public static void main(String[] args) { // traverse enum Season for (Season s : Season.values()) { System.out.println(s); } } }
Kết quả:
SPRING SUMMER FALL WINTER
Phương thức values() trong enum
Trình biên dịch trong java tự động thêm phương thức values() vào enum khi nó được biên dịch. Phương thức values() trả về một mảng chứa tất cả các giá trị của enum.
3. Khởi tạo giá trị đặc biệt cho hằng số enum
Các hằng số enum có giá trị ban đầu bắt đầu từ 0, 1, 2, 3, ... Nhưng chúng ta có thể khởi tạo giá trị cụ thể cho các hằng số enum bằng cách định nghĩa các trường và các Constructor. Như đã giới thiệu, Enum có thể có các trường, phương thức và Constructor.
Ví dụ 1: về định nghĩa giá trị ban đầu cho hằng số enum:
package vn.kienthuclaptrinh.javaenum; public class EnumExample5 { // define enum Season enum Season { SPRING(5), SUMMER(10), FALL(15), WINTER(20); private int value; private Season(int value) { this.value = value; } } public static void main(String args[]) { for (Season s : Season.values()) { System.out.println(s + " " + s.value); } } }
Kết quả:
SPRING 5 SUMMER 10 FALL 15 WINTER 20
Ví dụ 2: về định nghĩa nhiều giá trị cho hằng số enum:
Tạo enum PageInfo với tên file PageInfo.java:
package vn.kienthuclaptrinh.javaenum; public enum PageInfo { // define enum with 3 variable PAGE_001("PAGE_001", "Login", "/login"), PAGE_002("PAGE_002", "Add new user", "/addUser"), PAGE_003("PAGE_003", "List user", "/listUser"); private String pageID; private String pageTitle; private String pageURL; /** * constructor * * @param pageID * @param pageTitle * @param pageURL */ private PageInfo(String pageID, String pageTitle, String pageURL) { this.pageID = pageID; this.pageTitle = pageTitle; this.pageURL = pageURL; } // getter & setter public String getPageID() { return pageID; } public void setPageID(String pageID) { this.pageID = pageID; } public String getPageTitle() { return pageTitle; } public void setPageTitle(String pageTitle) { this.pageTitle = pageTitle; } public String getPageURL() { return pageURL; } public void setPageURL(String pageURL) { this.pageURL = pageURL; } }
Tạo lớp Test.java để sử dụng enum đã tạo ở trên:
package vn.kienthuclaptrinh.javaenum; public class Test { public static void main(String[] args) { System.out.println("pageID: " + PageInfo.PAGE_001.getPageID()); System.out.println("pageTitle: " + PageInfo.PAGE_001.getPageTitle()); System.out.println("pageURL: " + PageInfo.PAGE_001.getPageURL()); } }
Kết quả:
pageID: PAGE_001 pageTitle: Login pageURL: /login
4. Sử dụng java enum trong câu lệnh switch
Dưới đây là ví dụ về sử dụng java enum trong câu lệnh switch:
package vn.kienthuclaptrinh.javaenum; public class EnumExample5 { // define days of week enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String args[]) { Day day = Day.SUNDAY; switch (day) { case SUNDAY: System.out.println("sunday"); break; case MONDAY: System.out.println("monday"); break; default: System.out.println("other day"); } } }
Kết quả:
sunday
5. So sánh các phần tử java enum
Bạn có thể sử dụng phương thức equals() hoặc toán tử '==' để so sánh các phần tử enum, ví dụ:
package vn.kienthuclaptrinh.javaenum; public class EnumExample7 { // define days of week enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String args[]) { Day day1 = Day.SUNDAY; Day day2 = Day.MONDAY; // use equal() method if (day1.equals(Day.SUNDAY)) { System.out.println("sunday"); } // use '==' operator if (day2 == Day.MONDAY) { System.out.println("monday"); } } }
Kết quả:
sunday monday
6. Câu hỏi về enum trong java
Câu hỏi 1: Chúng ta có thể tạo ra thể hiện của enum bằng từ khoá new không?
Không, bởi vì nó chỉ có các Constructor private.
Câu hỏi 2: Chúng ta có thể khai báo phương thức trừu tượng trong enum không?
Có, chúng ta có thể có các phương thức trừu tượng và có thể cung cấp việc thực hiện các phương thức này.