Enums shared static look-up method

前端 未结 2 1131
攒了一身酷
攒了一身酷 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:35

    This is a bit tricky because the values() method is static. You would actually need reflection, but there is a nice way to hide this using standard library functionality.

    First, define an interface with the methods common to all of your enum types:

    public interface Common {
        Integer getCode();
        String getDescription();
    }
    

    Then, make all your enums implement this interface:

    public enum MyEnum implements Common {...}
    

    The static method you want to have then looks like:

    public static  & Common> T getValueOf( Class type, Integer code ) {
        final EnumSet values = EnumSet.allOf( type );
        for(T e : values) {
            if(e.getCode().equals( code )) {
                return e;
            }
        }
        throw new IllegalArgumentException( "No enum const " + type.getName() + " for code \'" + code + "\'" );
    }
    

提交回复
热议问题