Kiểu enum là gì?


Hỏi ĐápLà gì

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.
  • namelà 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_YEAR và CHRISTMAS 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!

Đăng Ký

Java Core

Bài trước Bài sau

2 comments 877 likes

Vũ Thanh Tài

About author

The best way to learn is to share

Xem tất cả bài đăng

Bài Viết Mới

  • Những tính năng mới trong PHP 8.1

    Những tính năng mới trong PHP 8.1

    3 tháng trước 5 Comments

  • Bài 39: Cache trong Laravel 8

    Bài 39: Cache trong Laravel 8

    10 tháng trước 1 Comments

  • PHP Swoole là gì? nó có gì mạnh?

    PHP Swoole là gì? nó có gì mạnh?

    11 tháng trước 0 Comment

  • Cài đặt SSL trên local sử dụng mkcert

    Cài đặt SSL trên local sử dụng mkcert

    11 tháng trước 4 Comments

2 Comments

kho hieu

Minh

Reply

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

Đào tuyên

Reply

Bình luận

Captcha

Đăng