Java中Enum的优雅用法

2020-03-26  本文已影响0人  紫石南

Java中Enum的优雅用法

本文简单总结一些Java中enum的坑以及优雅的用法。

普通的enum有什么问题

优雅用法:带自定义id的enum

优雅的用法是在enum中定义int值,并在构造方法限定int值。举个例子:

/**
 * 性别
 */
public enum Gender {
    /**
     * 男
     */
    MALE(1),
    /**
     * 女
     */
    FEMALE(0),
    /**
     * 保密
     */
    SECURITY(2),
    ;
    private int id;
    Gender(int id) {
        this.id = id;
    }

    public static Gender getInstance(int id) {
        for (Gender tmp : Gender.values()) {
            if (tmp.id == id) {
                return tmp;
            }
        }
        return null;
    }

    public int getId() {
        return id;
    }
}

这样就可以在其他地方获取id,也可以根据id获取对应enum。

通用Enum工具

但是这样每定义一种enum就得写一个getInstance方法,还是不够优雅,处理思路是写一个通用的工具方法来做这个事情。
首先定义一个通用enum的接口:

public interface IdEnum {
    int getId();
}

然后让定义的enum实现这个接口:

/**
 * 性别
 */
public enum Gender implements IdEnum {
    /**
     * 男
     */
    MALE(1),
    /**
     * 女
     */
    FEMALE(0),
    /**
     * 保密
     */
    SECURITY(2),
    ;
    private int id;
    Gender(int id) {
        this.id = id;
    }
    @Override
    public int getId() {
        return id;
    }
}

这里就不需要getInstance方法了,直接利用Java的泛型特性写一个通用的获取方法:

public class EnumUtil {
    public static <T extends IdEnum> T valueOf(Class<T> enumType, int id) {
        for (T value : enumType.getEnumConstants()) {
            if (value.getId() == id) {
                return value;
            }
        }
        return null;
    }
}
上一篇下一篇

猜你喜欢

热点阅读