Java Enums - Tìm hiểu kiểu dữ liệu chưa tập cố định
11/04/2023 01:30
Enum trong Java là một kiểu dữ liệu chứa một tập cố định các hằng số. Tìm hiểu thêm về enums và các thông tin liên quan cần biết ngay trong bài viết sau bạn nhé
Enum trong Java là một kiểu dữ liệu chứa một tập cố định các hằng số.
Nó có thể được sử dụng cho các ngày trong tuần (CHỦ NHẬT, THỨ HAI, THỨ BA, THỨ TƯ, THỨ NĂM, THỨ SÁU và THỨ BẢY), hướng (BẮC, NAM, ĐÔNG và TÂY), mùa (XUÂN, HẠ, ĐÔNG, và THU hoặc THU ), màu sắc (ĐỎ, VÀNG, XANH DƯƠNG, XANH LÁ CÂY, TRẮNG và ĐEN), v.v. Theo quy ước đặt tên của Java, chúng ta phải viết hoa tất cả các hằng số. Vì vậy, chúng ta có hằng số enum bằng chữ in hoa.
Java Enums có thể được coi là các lớp có một tập hợp các hằng số cố định (một biến không thay đổi). Các hằng Java enum là tĩnh và cuối cùng hoàn toàn. Nó có sẵn kể từ JDK 1.5.
Enums được sử dụng để tạo kiểu dữ liệu của riêng chúng ta như các lớp. Kiểu dữ liệu enum (còn được gọi là Kiểu dữ liệu liệt kê) được sử dụng để xác định một enum trong Java. Không giống như C/C++, enum trong Java mạnh hơn . Ở đây, chúng ta có thể định nghĩa một enum bên trong lớp hoặc bên ngoài lớp.
Java Enum kế thừa bên trong lớp Enum , vì vậy nó không thể kế thừa bất kỳ lớp nào khác, nhưng nó có thể triển khai nhiều giao diện. Chúng ta có thể có các trường, hàm tạo, phương thức và phương thức chính trong Java enum.
Những điểm cần nhớ đối với Java Enum
- Enum cải thiện an toàn loại
- Enum có thể dễ dàng sử dụng trong switch
- Enum có thể được duyệt qua
- Enum có thể có các trường, hàm tạo và phương thức
- Enum có thể triển khai nhiều giao diện nhưng không thể mở rộng bất kỳ lớp nào vì nó mở rộng bên trong lớp Enum
Ví dụ đơn giản về Java Enum
- class EnumExample1{
- //defining the enum inside the class
- public enum Season { WINTER, SPRING, SUMMER, FALL }
- //main method
- public static void main(String[] args) {
- //traversing the enum
- for (Season s : Season.values())
- System.out.println(s);
- }}
Chúng ta hãy xem một ví dụ khác về Java enum nơi chúng ta đang sử dụng các phương thức value(), valueOf() và ordinal() của Java enum.
- class EnumExample1{
- //defining enum within class
- public enum Season { WINTER, SPRING, SUMMER, FALL }
- //creating the main method
- public static void main(String[] args) {
- //printing all enum
- for (Season s : Season.values()){
- System.out.println(s);
- }
- System.out.println("Value of WINTER is: "+Season.valueOf("WINTER"));
- System.out.println("Index of WINTER is: "+Season.valueOf("WINTER").ordinal());
- System.out.println("Index of SUMMER is: "+Season.valueOf("SUMMER").ordinal());
- }}
Output:
WINTER SPRING SUMMER FALL Value of WINTER is: WINTER Index of WINTER is: 0 Index of SUMMER is: 2
Mục đích của phương thức value() trong enum là gì?
Trình biên dịch Java thêm vào bên trong phương thức values() khi nó tạo một enum. Phương thức values() trả về một mảng chứa tất cả các giá trị của enum.
Mục đích của phương thức valueOf() trong enum là gì?
Trình biên dịch Java thêm vào bên trong phương thức valueOf() khi nó tạo một enum. Phương thức valueOf() trả về giá trị của hằng số enum đã cho.
Mục đích của phương thức thứ tự () trong enum là gì?
Trình biên dịch Java thêm vào bên trong phương thức ordinal() khi nó tạo một enum. Phương thức ordinal() trả về chỉ mục của giá trị enum.
Định nghĩa Java Enum
Enum có thể được định nghĩa bên trong hoặc bên ngoài lớp vì nó tương tự như một lớp. Dấu chấm phẩy (;) ở cuối hằng số enum là tùy chọn. Ví dụ:
- enum Season { WINTER, SPRING, SUMMER, FALL }
Or,
- enum Season { WINTER, SPRING, SUMMER, FALL; }
Java Enum Example: Defined outside class
- enum Season { WINTER, SPRING, SUMMER, FALL }
- class EnumExample2{
- public static void main(String[] args) {
- Season s=Season.WINTER;
- System.out.println(s);
- }}
Java Enum Example: Defined inside class
- class EnumExample3{
- enum Season { WINTER, SPRING, SUMMER, FALL; }//semicolon(;) is optional here
- public static void main(String[] args) {
- Season s=Season.WINTER;//enum type is required to access WINTER
- System.out.println(s);
- }}
Khởi tạo các giá trị cụ thể cho hằng số enum
Hằng số enum có giá trị ban đầu bắt đầu từ 0, 1, 2, 3, v.v. Tuy nhiên, chúng ta có thể khởi tạo giá trị cụ thể cho hằng số enum bằng cách xác định các trường và hàm tạo. Như đã chỉ định trước đó, Enum có thể có các trường, hàm tạo và phương thức.
Ví dụ về chỉ định giá trị ban đầu cho hằng số enum
- class EnumExample4{
- enum Season{
- WINTER(5), SPRING(10), SUMMER(15), FALL(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);
- }}
Mã nội bộ được tạo bởi trình biên dịch cho ví dụ trên về kiểu enum
- final class Season extends Enum
- {
- public static Season[] values()
- {
- return (Season[])$VALUES.clone();
- }
- public static Season valueOf(String s)
- {
- return (Season)Enum.valueOf(Season, s);
- }
- private Season(String s, int i, int j)
- {
- super(s, i);
- value = j;
- }
- public static final Season WINTER;
- public static final Season SUMMER;
- private int value;
- private static final Season $VALUES[];
- static
- {
- WINTER = new Season("WINTER", 0, 10);
- SUMMER = new Season("SUMMER", 1, 20);
- $VALUES = (new Season[] {
- WINTER, SUMMER
- });
- }
- }