How to retrieve Enum name using the id?

前端 未结 11 1688
一整个雨季
一整个雨季 2020-12-05 13:11

I have the enum as:

public enum EnumStatus {

    PASSED(40L, \"Has Passed\"),
    AVERAGE(60L, \"Has Average Marks\"),
    GOOD(80L, \"Has Good         


        
11条回答
  •  我在风中等你
    2020-12-05 13:47

    This can be done using a static map along with a static initializer:

    public enum EnumStatus {
    
        PASSED(40L, "Has Passed"),
        AVERAGE(60L, "Has Average Marks"),
        GOOD(80L, "Has Good Marks");
    
        private static final Map byId = new HashMap();
        static {
            for (EnumStatus e : EnumStatus.values()) {
                if (byId.put(e.getId(), e) != null) {
                    throw new IllegalArgumentException("duplicate id: " + e.getId());
                }
            }
        }
    
        public static EnumStatus getById(Long id) {
            return byId.get(id);
        }
    
        // original code follows
    
        private java.lang.String name;
    
        private java.lang.Long id;
    
        EnumStatus(Long id, java.lang.String name) {
            this.name = name;
            this.id = id;
        }
    
        public java.lang.String getName() {
            return name;
        }
    
        public java.lang.Long getId() {
            return id;
        }
    
    }
    

    This will give an O(1) getById() method, and will automatically detect if you accidentally have duplicate ids in the enum.

提交回复
热议问题