Java enums

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về enum trong Java. Chúng ta sẽ học cách tạo và sử dụng enum và các lớp enum với sự trợ giúp của các ví dụ.

Trong Java, enum (viết tắt của enumeration) là một kiểu có một tập hợp các giá trị không đổi cố định. Chúng tôi sử dụng enumtừ khóa để khai báo enums. Ví dụ,

enum Size { 
   SMALL, MEDIUM, LARGE, EXTRALARGE 
}

Ở đây, chúng tôi đã tạo một enum có tên là Size . Nó chứa các giá trị cố định SMALL , MEDIUM , LARGE và EXTRALARGE .

Những giá trị bên trong dấu ngoặc nhọn này được gọi là hằng số enum (giá trị).

Lưu ý: Hằng số enum thường được biểu diễn bằng chữ hoa.

Ví dụ 1: Java Enum

enum Size {
   SMALL, MEDIUM, LARGE, EXTRALARGE
}

class Main {
   public static void main(String[] args) {
      System.out.println(Size.SMALL);
      System.out.println(Size.MEDIUM);
   }
}

Đầu ra

SMALL
MEDIUM

Như chúng ta có thể thấy từ ví dụ trên, chúng ta sử dụng tên enum để truy cập các giá trị hằng.

Ngoài ra, chúng ta có thể tạo các biến kiểu enum. Ví dụ,

Size pizzaSize;

Ở đây, pizzaSize là một biến của loại Size . Nó chỉ có thể được gán với 4 giá trị.

pizzaSize = Size.SMALL;
pizzaSize = Size.MEDIUM;
pizzaSize = Size.LARGE;
pizzaSize = Size.EXTRALARGE;

Ví dụ 2: Java Enum với câu lệnh switch

enum Size {
 SMALL, MEDIUM, LARGE, EXTRALARGE
}

class Test {
 Size pizzaSize;
 public Test(Size pizzaSize) {
   this.pizzaSize = pizzaSize;
 }
 public void orderPizza() {
   switch(pizzaSize) {
     case SMALL:
       System.out.println("I ordered a small size pizza.");
       break;
     case MEDIUM:
       System.out.println("I ordered a medium size pizza.");
       break;
     default:
       System.out.println("I don't know which one to order.");
       break;
   }
 }
}

class Main {
 public static void main(String[] args) {
   Test t1 = new Test(Size.MEDIUM);
   t1.orderPizza();
 }
}

Đầu ra

I ordered a medium size pizza.

Trong chương trình trên, chúng ta đã tạo một kiểu enum Size . Sau đó, chúng tôi khai báo một biến pizzaSize của loại Size .

Ở đây, biến pizzaSize chỉ có thể được gán với 4 giá trị ( NHỎ , TRUNG BÌNH , LỚN , CỰC KỲ ).

Lưu ý tuyên bố,

Test t1 = new Test(Size.MEDIUM);

Nó sẽ gọi phương thức Test()khởi tạo bên trong lớp Test . Bây giờ, biến pizzaSize được gán với hằng số MEDIUM .

Dựa trên giá trị, một trong các trường hợp của câu lệnh switch case được thực thi.

Enum Class trong Java

Trong Java, các kiểu enum được coi là một kiểu lớp đặc biệt. Nó được giới thiệu cùng với việc phát hành Java 5.

Một lớp enum có thể bao gồm các phương thức và trường giống như các lớp thông thường.

enum Size {
    constant1, constant2, …, constantN;

    // methods and fields	
}

Khi chúng ta tạo một lớp enum, trình biên dịch sẽ tạo các thể hiện (đối tượng) của mỗi hằng số enum. Ngoài ra, tất cả hằng số enum luôn public static finalđược mặc định.

Ví dụ 3: Lớp Java Enum

enum Size{
  SMALL, MEDIUM, LARGE, EXTRALARGE;

  public String getSize() {

    // this will refer to the object SMALL
    switch(this) {
      case SMALL:
        return "small";

      case MEDIUM:
        return "medium";

      case LARGE:
        return "large";

      case EXTRALARGE:
        return "extra large";

      default:
        return null;
      }
   }

  public static void main(String[] args) {

    // call getSize()
    // using the object SMALL
    System.out.println("The size of the pizza is " + Size.SMALL.getSize());
  }
}

Đầu ra

The size of the pizza is small

Trong ví dụ trên, chúng ta đã tạo một Kích thước lớp enum . Nó có bốn hằng số SMALL , MEDIUM , LARGE và EXTRALARGE .

Vì Size là một lớp enum, trình biên dịch tự động tạo các thể hiện cho mỗi hằng số enum.

Ở đây bên trong main()phương thức, chúng ta đã sử dụng thể hiện SMALL để gọi getSize()phương thức.

Lưu ý : Giống như các lớp thông thường, một lớp enum cũng có thể bao gồm các hàm tạo. Để tìm hiểu thêm về nó, hãy truy cập hàm tạo Java enum .

Các phương thức của Java Enum Class

Có một số phương thức được xác định trước trong các lớp enum có sẵn để sử dụng.

1. Java Enum thứ tự ()

Các ordinal()phương thức trả về vị trí của một hằng số enum. Ví dụ,

ordinal(SMALL) 
// returns 0

2. Enum so sánhTo ()

Các compareTo()phương pháp so sánh hằng enum dựa trên giá trị thứ tự của họ. Ví dụ,

Size.SMALL.compareTo(Size.MEDIUM)
 // returns ordinal(SMALL) - ordinal(MEDIUM)

3. Enum toString ()

Các toString()phương pháp trả về chuỗi đại diện của hằng enum. Ví dụ,

SMALL.toString()
// returns "SMALL"

4. Tên Enum ()

Các name()phương thức trả về tên xác định một hằng số enum ở dạng chuỗi. Giá trị trả về từ name()phương thức là final. Ví dụ,

name(SMALL)
// returns "SMALL"

5. Java Enum valueOf ()

Các valueOf()phương pháp có một chuỗi và trả về một hằng số enum có tên chuỗi tương tự. Ví dụ,

Size.valueOf("SMALL")
// returns constant SMALL.

6. Giá trị enum ()

Các values()phương thức trả về một mảng của kiểu enum chứa tất cả các hằng số enum. Ví dụ,

Size[] enumArray = Size.value();

Tại sao sử dụng Java Enums?

Trong Java, enum được giới thiệu để thay thế việc sử dụng hằng số int .

Giả sử chúng ta đã sử dụng một tập hợp các inthằng số.

class Size {
   public final static int SMALL = 1;
   public final static int MEDIUM = 2;
   public final static int LARGE = 3;
   public final static int EXTRALARGE = 4;
}

Ở đây, vấn đề nảy sinh nếu chúng ta in các hằng số. Đó là bởi vì chỉ số được in ra có thể không hữu ích.

Vì vậy, thay vì sử dụng hằng số int, chúng ta có thể chỉ cần sử dụng enum. Ví dụ,

enum Size {
   SMALL, MEDIUM, LARGE, EXTRALARGE
}

Điều này làm cho mã của chúng tôi trực quan hơn.

Ngoài ra, enum cung cấp sự an toàn kiểu thời gian biên dịch .

Nếu chúng ta khai báo một biến có kiểu Size . Ví dụ,

Size size;

Ở đây, nó được đảm bảo rằng biến sẽ giữ một trong bốn giá trị. Bây giờ, Nếu chúng ta cố gắng chuyển các giá trị khác với bốn giá trị đó, trình biên dịch sẽ tạo ra lỗi.









Gõ tìm kiếm nhanh...