Java Flexible use of enumerations to represent a set of strings

  • 2021-09-11 20:24:00
  • OfStack

The Java enumeration represents a set of strings


public class HelloWorld {
    public static void main(String []args) {
       System.out.println("Hello World!");
		System.out.println(Season.SPRING.toString());
		System.out.println(Season.SPRING.value());
    }
}
enum Season {
	SPRING("spring"), SUMMER("summer"), AUTUMN("autumn"), WINTER("winter");
	
	public final String value;
	private Season(String value) {
		this.value = value;
	}
	
	public String value() {
		return this.value;
	}
}

The program output is as follows:

Hello World!
SPRING
spring

Proper Use of Java Enumeration Classes

Specification uses enumeration classes


public enum StatEnum {
    SUCCESS(1," Success "),
    FAILD(0," Failure "),
    REPEAT(-1," Repetition "),
    INNER_ERROR(-2," System anomaly "),
    DATA_ERROR(-3," Data anomaly ");
    private  int state;
    private  String stateInfo;
    StatEnum(int state, String stateInfo) {
        this.state = state;
        this.stateInfo = stateInfo;
    }
    public int getState() {
        return state;
    }
    public String getStateInfo() {
        return stateInfo;
    }
    public static StatEnum stateOf(int index){
        for(StatEnum state: values()){
            if(state.getState() == index){
                return state;
            }
        }
        return  null;
    }
}

Enumeration matches interface 1 to use


//  Defining an interface 
public interface CodeEnum {
    Integer getCode();    
    String getMessage();
}

//  Defining an enumeration 
public enum StatusEnum implements CodeEnum {
    SUCCESS(0, " Success "),
    DAILD(1, " Failure ");
    private Integer code;
    private String message;
    StatusEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
    
    @Override
    public Integer getCode() {
        return code;
    }
    @Override
    public String getMessage() {
        return message;
    }
}

//  Defining a tool class 
public class EnumUtil {
    public static <T extends CodeEnum> T getByCode(Integer code, Class<T> enumClass) {
        for (T each: enumClass.getEnumConstants()) {
            if (code.equals(each.getCode())) {
                return each;
            }
        }
        return null;
    }
}

Use:


EnumUtil.getByCode(0, StatusEnum.class).getMessage()
EnumUtil.getByCode(1, StatusEnum.class).getCode()

Related articles: