Bản chất của Enum trong java

Enum trong java thực chất là 1 class với số lượng instance cố định.

I. Trường hợp không có instance variables

Ví dụ

public enum Season {
    SPRING, SUMMER, FALL, WINTER
}
  • Đây là 1 class chỉ có 4 instances SPRING, SUMMER, FALL, WINTER không hơn.
  • 4 instance này là constant nên viết hoa và mặc định là public static

Cách sử dụng:

public class App {

    public static void main(String[] args) {
        
        //Gọi trực tiếp từ class vì nó là static
        System.out.println(Season.SPRING); //SPRING
        System.out.println(Season.SUMMER); //SUMMER
        System.out.println(Season.FALL);   //FALL
        System.out.println(Season.WINTER); //WINTER
    }
}

II. Trường hợp có instance variables

Trong trường hợp này, số lượng instance của class cũng là cố định, 4 instances, nhưng trong mỗi instance lại chứa những thông tin khác nhau, tùy vào việc khai báo instance variables.

package com.giangtester.blog;

public enum Season2 {
    // instance của class Season2
    SPRING("spring", 1),
    SUMMER("summer", 2),
    FALL("fall", 3),
    WINTER("winter", 4);
		
    // instance variables
    private final String name;
    private final int order;

    // constructor này mặc định là private
    Season2(String name, int order) {
        this.name = name;
        this.order = order;
    }

    public String getName() {
        return name;
    }

    public int getOrder() {
        return order;
    }
}

Cách sử dụng:

public class App {

    public static void main(String[] args) {
        System.out.println(Season2.SPRING.getName()); //spring
        System.out.println(Season2.FALL.getOrder());  //3
    }
}

Note:

  • Bạn không thể kế thừa enum
  • Bạn có thể lấy được toàn bộ các instance của enum thông qua method .values(). Ví dụ
public class App {

    public static void main(String[] args) {
        for (Season2 season : Season2.values()) {
            System.out.printf("name: %s, order: %d \n", 
                              season.getName(), season.getOrder());
        }
    }
}
name: spring, order: 1 
name: summer, order: 2 
name: fall, order: 3 
name: winter, order: 4 

III. Tổng kết

Enum là 1 thứ rất powerfull trong java, chứa những thông tin cố định, không thay đổi. Tuy nhiên, mình là không thấy nhiều các bạn tester sử dụng nó trong lập trình auto test, mà dùng những technique khác để làm những việc chính xác là của enum. Hi vọng qua bài này, các bạn hiểu được bản chất của enum và sử dụng enum đúng mục đích.

0

Leave a Reply

Your email address will not be published. Required fields are marked *