Java Enum (liệt kê)

Trong bài viết này, tôi sẽ viết về liệt kê Java, đó là cách thanh lịch nhất để định nghĩa và sử dụng các hằng trong ứng dụng của bạn.

lap-trinh-java
Java Enum (Enumerations)

Đây là tính năng cơ bản mà mọi người đều biết nhưng có một số điều nữa mà bạn có thể không biết.

Tại sao tôi phải quan tâm?

Vâng, bạn sử dụng enums trong mã Java của bạn. Nếu bạn không làm như vậy thì bạn đã làm gì đó sai hoặc có các ứng dụng rất đơn giản mà không có nhiều chức năng phức tạp.

Dù sao, hãy nhìn vào những điều cơ bản. Ví dụ, bạn muốn có một lớp học sử dụng ngày làm việc. Bạn có thể định nghĩa nó như thế này:

public class Schedule {
     private ??? workday;
   }

Để lưu trữ các ngày làm việc, hãy để nhóm tạo một lớp tiện ích lưu trữ các hằng số cho các ngày làm việc:

public class Workdays {
public static final String MONDAY = "Monday";
public static final String TUESDAY = "Tuesday";
public static final String WEDNESDAY = "Wednesday";
public static final String THURSDAY = "Thursday";
public static final String FRIDAY = "Friday";
}

Bây giờ lớp Lịch biểu sẽ như thế này:

public class Schedule {
// Workdays.MONDAY, Workdays.TUESDAY
// Workdays.WEDNESDAY, Workdays.THURSDAY
// Workdays.FRIDAY
private String workday;
}

Tôi đoán bạn sẽ thấy lỗ hổng của cách tiếp cận này: Bạn có thể dễ dàng đặt ngày làm việc thành Thứ bảy và Thứ bảy Chủ nhật ngay cả khi nó không được xác định trong lớp Ngày làm việc.

Giải pháp này không an toàn về giá trị. Và đây không phải là những gì chúng ta muốn đạt được. 

Để giải quyết vấn đề này, hãy chuyển đổi lớp Workday thành enum:

public enum Workday {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY
}

Yêu cầu gõ ít hơn và bây giờ giải pháp là giá trị an toàn. Chúng ta chỉ phải điều chỉnh lớp Schredule của mình:

public class Schedule {
private Workday workday;
public Workday getWorkday() {
   return this.workday;
}
public void setWorkday(Workday workday) {
   this.workday = workday;
}
}

Enums trong điều kiện.

Enums rất phù hợp với các biểu thức điều kiện (nếu câu lệnh hoặc khối chuyển đổi).

Điều thú vị về enums là chúng là các giá trị không đổi, do đó bạn có thể so sánh chúng với toán tử == thanh lịch hơn so với sử dụng bằng () – và nó có thể tránh được NullPulumExceptions.

Và nhân tiện: nếu bạn nhìn vào việc thực hiện bằng () của lớp Enum, bạn sẽ thấy như sau:

public final boolean equals(Object other) {
   return this==other;
}

Vì vậy, sử dụng == một cách tự do vì đây là cách triển khai mặc định của bằng ().

Hãy để xem các ví dụ về cách sử dụng chúng:

if(currentSchedule.getWorkday() == Workday.FRIDAY) {
System.out.println("Hurray! Tomorrow is weekend!");
}

Hoặc trong một khối chuyển đổi:

switch(currentSchedule.getWorkday()) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
   System.out.println("Working and working and...");
   break;
case FRIDAY:
   System.out.println("Hurray! Tomorrow is weekend!");
   break;
default:
   System.out.println("Unknown day -.-");
}

Lặp đi lặp lại

Lặp lại enums khá đơn giản. Lớp Enum định nghĩa một phương thức gọi là các giá trị () trả về cho bạn các giá trị của enum đã cho.

Lĩnh vực Enum

Đôi khi bạn chỉ muốn in enum lên bàn điều khiển (hoặc hiển thị chúng trong một loại UI). Trong ví dụ trên (Ngày làm việc), bạn có thể chỉ cần sử dụng tên của bảng liệt kê, mặc dù đôi khi, TUESDAY, có vẻ như la hét và thứ ba, thứ ba sẽ được ưa thích hơn.

Trong trường hợp này, bạn có thể thêm và sử dụng các trường tùy chỉnh của các đối tượng Enum:

public enum Workday {
MONDAY("Monday"),
TUESDAY("Tuesday"),
WEDNESDAY("Wednesday"),
THURSDAY("Thursday"),
FRIDAY("Friday");
private final String representation;
private Workday(String representation) {
   this.representation = representation;
}
}

Như bạn có thể thấy trong ví dụ trên, Enum có một trường riêng, trong trường hợp này được gọi là đại diện.

Bài viết gần đây

Java Lambda: Hướng dẫn cho người mới bắt đầu

Bài viết này giải thích các biểu thức Java Lambda trong Java 8. Biểu thức Lambda Java

Ví dụ về Tải xuống tệp từ máy chủ bằng cách sử dụng JSP

Trong ví dụ này, chúng tôi sẽ tải xuống tệp jsp. Nhưng bạn có thể tải xuống bất kỳ tập tin. 

Hướng dẫn sử dụng Spring JdbcTemplate

Spring JdbcTemplate là một cơ chế mạnh mẽ để kết nối với cơ sở dữ liệu và thực hiện các truy vấn SQL. Nó sử...

Hướng dẫn chủ đề Java

Một Instance of Thread là một đối tượng giống như bất kỳ đối tượng nào khác trong Java và nó chứa các biến và...

Tải tập tin lên máy chủ bằng cách sử dụng JSP

Có nhiều cách để tải tệp lên máy chủ. Một trong những cách là bởi lớp MultipartRequest. Để sử dụng lớp này,...

Ví dụ cấu hình Spring AOP AspectJ Xml

Spring cho phép bạn xác định các khía cạnh, lời khuyên và điểm nhấn trong tệp xml. Trong trang...

Leave a reply

Please enter your comment!
Please enter your name here