Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 12: Enum trong Java

Tiếp tục series, phần này mình sẽ giới thiệu với mọi người về enum trong Java.

1. Enum là gì?

Enum trong Java là một kiểu dữ liệu đặc biệt, là một tập hợp các hằng số được xác định trước.

Enum có thể khai báo bên ngoài class, bên trong class hoặc cũng có thể nằm ở một file riêng biệt.

Enum có thể chứa các thành phần như một object bình thường. Có thể khai báo thuộc tính, phương thức, constructor.

Tất cả các enum đều được extend từ java.lang.Enum, nên nó cũng có sẵn một số các phương thức bên trong enum.

2. Khai báo Enum.

Để khai báo enum trong Java các bạn sử dụng cú pháp sau:

access_modify enum name {
	// thanh phan ben trong
}

Trong đó:

  • access_modify là phạm vi truy cập của enum (public, protected, private, default), hoặc cũng có thể để trống.
  • name là tên của enum.

VD: Khai báo một enum chứa các ngày trong tuần.

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}

VD: Khai báo một enum có method bên trong.

public enum Day {
  SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
  THURSDAY, FRIDAY, SATURDAY;

  public static void printAll() {
    for (Day day : Day.values()) {
      System.out.println(day);
    }
  }
}

3. Truy xuất giá trị trong enum.

Để truy xuất giá trị của trong enum các bạn thực hiện cú pháp sau:

enumName.property

Trong đó:
- enumName là tên của enum chúng ta cần truy xuất.
- property là hằng số các bạn cần truy xuất.

VD: Mình sẽ truy xuất giá trị trong enum Day ở trên.

public class Main {
  public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY
  }

  public static void main(String[] args) {
    System.out.println(Day.SUNDAY); // SUNDAY
    System.out.println(Day.MONDAY); // MONDAY
  }
}

VD: Gọi method trong enum.

public class Main {
  public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY;

    public static void printAll() {
      for (Day day : Day.values()) {
        System.out.println(day);
      }
    }
  }

  public static void main(String[] args) {
    Day.printAll();
  }
}

Bạn cũng có thể dùng vòng lặp for để duyệt qua các phần tử của enum bằng các sử dụng phương thức values().

VD: Mình sẽ duyệt và in ra tất cả các ngày có trong enum.

public class Main {
  public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY
  }

  public static void main(String[] args) {
    for (Day day : Day.values()) {
      System.out.println(day);
    }
  }
}

4. Constructor trong enum.

Trong enum bạn cũng có thể khai báo constructor và khởi tạo với các giá trị đặc biệt kèm theo.

Khi một enum đã khai báo contructor thì các hằng số bên trong nó cũng cần phần khai báo thêm các tham số truyền vào constructor như đã định nghĩa

VD: Khai báo enum HoliDay và định nghĩa constructor truyền vào day, month.

enum HoliDay {
  WESTERN_NEW_YEAR(1, 1),
  CHRISTMAS(25, 12);

  private final int day;

  private final int month;

  public int getDay() {
    return day;
  }

  public int getMonth() {
    return month;
  }

  HoliDay(int day, int month) {
    this.day = day;
    this.month = month;
  }
}

public class Main {

  public static void main(String[] args) {
    System.out.println(HoliDay.CHRISTMAS.getDay());
    System.out.println(HoliDay.CHRISTMAS.getMonth());
  }
}

Ở ví dụ trên như các bạn đã thấy thì do enum HoliDay có khai báo constructor và truyền vào 2 param nên ở các hằng số WESTERN_NEW_YEARCHRISTMAS cũng cần phải truyền vào 2 param thì mới có thể hoạt động được.

5. Các ví dụ.

VD: Sử dụng enum trong câu lệnh switch case.

public class EnumTest {
    Day day;
    
    public EnumTest(Day day) {
        this.day = day;
    }
    
    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY:
                System.out.println("Mondays are bad.");
                break;
                    
            case FRIDAY:
                System.out.println("Fridays are better.");
                break;
                         
            case SATURDAY: case SUNDAY:
                System.out.println("Weekends are best.");
                break;
                        
            default:
                System.out.println("Midweek days are so-so.");
                break;
        }
    }
    
    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(Day.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(Day.SUNDAY);
        seventhDay.tellItLikeItIs();
    }
}

Kết quả:

Mondays are bad.
Midweek days are so-so.
Fridays are better.
Weekends are best.
Weekends are best.

VD: So sánh giá trị trong enum.

public class Main {
    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
        THURSDAY, FRIDAY, SATURDAY
    }

    public static void main(String[] args) {
        Day monDay = Day.MONDAY;
        // so sán bằng toán tử so sánh
        if (monDay == Day.MONDAY) {
            System.out.println("Equal");
        }

        // so sánh bằng phương thức.
        if (monDay.equals(Day.MONDAY)) {
            System.out.println("Equal");
        }
    }
}

 

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

2 Comments

kho hieu

Minh

3 năm trước

sao anh không nói vê cái method abstract của nó hả anh.

Đào tuyên

2 năm trước

Bình luận

Captcha