×

Làm việc với Enum để định nghĩa tập hợp hằng số trong Java

Trong Java, enum (viết tắt của "enumeration") là một kiểu dữ liệu đặc biệt dùng để định nghĩa tập hợp hằng số. Đây là cách tiếp cận hữu ích giúp bạn nhóm các giá trị liên quan lại với nhau, làm cho mã nguồn trở nên rõ ràng và dễ bảo trì hơn. enum cung cấp các phương thức hữu ích, giúp đơn giản hóa một số tác vụ lập trình phức tạp.

Khai báo Enum

Cách khai báo cơ bản của enum như sau:

public enum NgayTrongTuan {
    CHU_NHAT, THU_HAI, THU_BA, THU_TU, THU_NAM, THU_SAU, THU_BAY
}

Cụ thể, NgayTrongTuan là tên của enum và các giá trị trong ngoặc phải là các giá trị hằng sẽ được tạo ra. Mỗi giá trị trong enum đều là các đối tượng công khai, tĩnh và cuối cùng của lớp kiểu enum.

Sử dụng Enum

Cách sử dụng enum rất đơn giản và trực quan. Ví dụ:

public class Main {
    public static void main(String[] args) {
        NgayTrongTuan ngay = NgayTrongTuan.THU_HAI;
        
        switch(ngay) {
            case CHU_NHAT:
                System.out.println("Chủ nhật");
                break;
            case THU_HAI:
                System.out.println("Thứ Hai");
                break;
            // Các trường hợp khác...
            default:
                System.out.println("Ngày không hợp lệ");
        }
    }
}

Trong ví dụ này, switch case là công cụ tuyệt vời để làm việc với enum bởi nó giúp mã nguồn trở nên ngắn gọn và dễ hiểu hơn.

Enum với Constructor và Method

enum có thể có constructor, method và biến instance. Đây là cách mở rộng khả năng của enum trong Java:

public enum NgayTrongTuan {
    CHU_NHAT("Sunday"), 
    THU_HAI("Monday"), 
    THU_BA("Tuesday"), 
    THU_TU("Wednesday"), 
    THU_NAM("Thursday"), 
    THU_SAU("Friday"), 
    THU_BAY("Saturday");

    private String englishName;
    
    private NgayTrongTuan(String englishName) {
        this.englishName = englishName;
    }

    public String getEnglishName() {
        return englishName;
    }
}

Với enum nâng cao này, bạn có thể lấy tên tiếng Anh của các ngày trong tuần. Ví dụ:

public class Main {
    public static void main(String[] args) {
        NgayTrongTuan ngay = NgayTrongTuan.THU_HAI;
        System.out.println(ngay.getEnglishName()); // Output: Monday
    }
}

Enum Kết Hợp với Các Interface

Có thể kết hợp enum với các interface để tận dụng tính trừu tượng và đa hình:

public interface MoTa {
    String moTa();
}

public enum NgayTrongTuan implements MoTa {
    CHU_NHAT {
        @Override
        public String moTa() {
            return "Đây là ngày nghỉ.";
        }
    },
    THU_HAI {
        @Override
        public String moTa() {
            return "Đầu tuần làm việc.";
        }
    },
    // Các giá trị khác với description tương ứng
}

Một Số Phương Thức Hữu Ích của Enum

Java cung cấp một số phương thức tiện ích cho enum, bao gồm:

  1. values(): Trả về một mảng chứa tất cả các hằng số của enum.
  2. valueOf(String name): Trả về hằng số có tên giống như tên được chỉ định.
  3. ordinal(): Trả về chỉ số của hằng số, theo thứ tự khai báo.

Ví dụ sử dụng phương thức values():

public class Main {
    public static void main(String[] args) {
        for (NgayTrongTuan ngay : NgayTrongTuan.values()) {
            System.out.println(ngay + " - " + ngay.ordinal());
        }
    }
}

Kết Luận

enum trong Java là công cụ mạnh mẽ và tiện dụng cho việc quản lý tập hợp các hằng số. Với khả năng mở rộng bằng constructor, method, và khả năng kết hợp với các interface, enum giúp mã nguồn trở nên rõ ràng, dễ quản lý và bảo trì hơn. Hy vọng qua bài viết này, bạn hiểu rõ hơn về sức mạnh và cách sử dụng enum trong Java.

Comments