Enums shared static look-up method

前端 未结 2 1133
攒了一身酷
攒了一身酷 2020-12-25 12:49

I have the following Enum:

public enum MyEnum{
    A(10, \"First\"), //
    B(20, \"Second\"), //
    C(35, \"Other options\");

    private Integer code;
           


        
2条回答
  •  不思量自难忘°
    2020-12-25 13:34

    You need to pass the actual enum class object as a parameter to your method. Then you can get the enum values using Class.getEnumConstants().

    In order to be able to access getCode() on the instances, you should define it in an interface and make all your enum types implement that interface:

    interface Encodable {
        Integer getCode();
    }
    
    public static  & Encodable> T getValueOf(Class enumClass, Integer code) {
        for (T e : enumClass.getEnumConstants()) {
            if (e.getCode().equals(code)) {
                return e;
            }
        }
        throw new IllegalArgumentException("No enum const " + enumClass.getName() + " for code \'" + code
                + "\'");
    }
    
    ...
    
    public enum MyEnum implements Encodable {
        ...
    }
    
    MyEnum e = getValueOf(MyEnum.class, 10);
    

提交回复
热议问题