Kiểu Dữ Liệu Enum Trong Java - Góc Học IT
Có thể bạn quan tâm
Bài này sẽ giới thiệu đến các bạn kiểu dữ liệu enum trong Java. Chúng ta đã từng tìm hiểu Kiểu dữ liệu enum trong C++. Các bạn có thể đọc thêm để tham khảo nhé.
1. Kiểu dữ liệu enum trong Java là gì?
Trong Java, enum là một kiểu dữ liệu bao gồm tập hợp các các giá trị hằng không đổi (enum constant). Chúng ta sử dụng từ khóa enum để khai báo một kiểu dữ liệu enum. Ví dụ:enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
Trong ví dụ trên, chúng ta có 1 kiểu enum tên là Size. Nó bao gồm các giá trị không đổi là SMALL, MEDIUM, LARGE và EXTRALARGE trong dấu ngoặc nhọn {}. Các giá trị hằng không đổi thường được viết hoa.
Chúng ta có thể tạo một biến kiểu dữ liệu enum và sử dụng toán tử chấm (.) để truy xuất các giá trị không đổi thuộc kiểu dữ liệu enum.enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } class Main { public static void main(String[] args) { Size s1 = Size.LARGE; Size s2 = Size.SMALL; System.out.println(s1); System.out.println(s2); } }
Kết quả
LARGE SMALLLưu ý: Nếu sử dụng tên enum Size truy xuất giá trị hằng không tồn tại trong Size thì sẽ gây ra lỗi.Size s3 = Size.SMALLEST;//error cannot find symbol variable SMALLEST
2. Enum class trong Java
Trong Java, kiểu dữ liệu enum có thể được xem như là một lớp đặc biệt. Một lớp enum có thể bao gồm những thuộc tính và phương thức giống như một lớp bình thường.
Khi chúng ta tạo một lớp enum thì trình biên dịch sẽ tự động tạo các đối tượng chính là các giá trị không đổi của enum. Tất cả các đối tượng này mặc định được trình biên dịch xác định khai báo là public static final. Ví dụ:enum Size{ SMALL, MEDIUM, LARGE, EXTRALARGE; public String getSize() { switch(this) { case SMALL: return "small"; case MEDIUM: return "medium"; case LARGE: return "large"; case EXTRALARGE: return "extra large"; default: return null; } } } class Main{ public static void main(String[] args) { //gọi hàm getSize() sử dụng đối tượng SMALL của enum Size System.out.println("The size of the pizza is " + Size.SMALL.getSize()); } }
Kết quả
The size of the pizza is smallTrong ví dụ trên, lớp enum Size được tạo ra. Lớp này tự động được trình biên dịch tạo ra có 4 đối tượng là SMALL, MEDIUM, LARGE và EXTRALARGE. Các đối tượng này có thể gọi hàm getSize() thuộc lớp enum để sử dụng.
Các phương thức của lớp enum
Giả sử, chúng ta có lớp enum sau:enum Size{ SMALL, MEDIUM, LARGE, EXTRALARGE; public void displayInfo(){ System.out.println(SMALL + ", " + MEDIUM + ", " + LARGE + ", " + EXTRALARGE); } }
Trong Java, một số phương thức đã được định nghĩa sẵn trong lớp enum để sử dụng.
Hàm ordinal()
Trả về vị trí của giá trị không đổi trong enum.Size s1 = Size.MEDIUM; System.out.println(s1.ordinal());//1
Hàm compareTo()
Trả về kết quả so sánh vị trí của các giá trị không đổi trong enum.System.out.println(Size.SMALL.compareTo(Size.MEDIUM));//-1 System.out.println(Size.EXTRALARGE.compareTo(Size.SMALL));//3
Hàm toString()
Trả về một chuỗi đại diện cho các giá trị không đổi trong enum.System.out.println(Size.SMALL.toString());//SMALL System.out.println(Size.EXTRALARGE.toString());//EXTRALARGE
Chúng ta có thể thay đổi chuỗi mặc định đại diện cho các enum constant.enum Size { SMALL { //ghi đè hàm toString() cho enum constant SMALL @Override public String toString() { return "The size is small."; } }, MEDIUM { //ghi đè hàm toString() cho enum constant MEDIUM @Override public String toString() { return "The size is medium."; } }; } class Main { public static void main(String[] args) { System.out.println(Size.MEDIUM.toString());//The size is medium. } }
Hàm name()
Trả về tên được định nghĩa trong enum của các giá trị không đổi.Size s1 = Size.MEDIUM; System.out.println(s1.name());//MEDIUM
Hàm valueOf()
Trả về một chuỗi có cùng tên với các giá trị không đổi trong enum.System.out.println(Size.valueOf("SMALL"));//SMALL System.out.println(Size.valueOf("SMALLEST"));//lỗi no enum constant Size.SMALLEST
Hàm values()
Trả về một mảng chứa các giá trị không đổi trong enum.Size[] enumArray = Size.values(); for(Size s:enumArray){ System.out.println(s); /*Kết quả xuất ra là SMALL MEDIUM LARGE EXTRALARGE*/ }
3. Enum constructor trong Java
Trong Java, một lớp enum cũng có thể có hàm khởi tạo giống như một lớp bình thường. Có 2 loại hàm khởi tạo của một lớp enum:
- private chỉ được truy cập trong lớp enum
- mặc định (default) chỉ được truy cập trong package chứa lớp enum
Ví dụ:
enum Size { //enum constants gọi hàm khởi tạo private SMALL("The size is small."), MEDIUM("The size is medium."), LARGE("The size is large."), EXTRALARGE("The size is extra large."); private final String cakeSize; //hàm khởi tạo private trong enum private Size(String pizzaSize) { this.cakeSize = pizzaSize; } public String getSize() { return cakeSize; } } class Main { public static void main(String[] args) { Size size = Size.SMALL; System.out.println(size.getSize()); } }Kết quả
The size is small.Trong ví dụ trên, hàm khởi tạo của lớp enum Size khai báo private nên chỉ được gọi trong lớp Size. Các hằng trong enum gọi hàm khởi tạo của lớp enum Size:SMALL("The size is small."), MEDIUM("The size is medium."), LARGE("The size is large."), EXTRALARGE("The size is extra large.");
Trong lớp Main, chúng ta gán Size.SMALL cho một biến có kiểu enum Size. Hằng SMALL đã gọi hàm khởi tạo của Size.
- Giới thiệu môn học Nhập môn lập trình
- Các môi trường phát triển tích hợp (IDE) cho C++
- Khái niệm hàm (function) trong lập trình và minh họa với C++
- Cấu trúc rẽ nhánh switch…case trong PHP
- Kỹ thuật lập trình truyền con trỏ cho hàm trong C++
Từ khóa » Cách Sử Dụng Enum Trong Java
-
Enum Trong Java - VietTuts
-
Java - Enum - Viblo
-
Enum Trong Java
-
Enum Trong Java - GP Coder (Lập Trình Java)
-
Java Enum Là Gì?. Tại Sao Nên Sử Dụng Enum? | TopDev
-
Hướng Dẫn Và Ví Dụ Java Enum - Openplanning
-
[Tự Học Java] Enum Trong Java »
-
Sử Dụng Enum Trong Lập Trình Java - Le Vu Nguyen
-
Enum Trong Java
-
Enum Trong Java - KungFu Tech
-
Bài 38: Hướng Dẫn Sử Dụng Enum Trong Java - YouTube
-
Enum Trong Java | V1Study
-
Enum Trong Java - Học Java - CodeGym
-
Enum Trong Java - 155 Bài Học Java Miễn Phí Hay Nhất