java 自定义可继承枚举Enum

1、定义enum抽象类

public class AbstractEnum {

    private static final Map<String, AbstractEnum> nameEnumMap = new ConcurrentHashMap<>();

    @Getter
    protected String name;

    protected AbstractEnum () {
    }

    protected AbstractEnum(String name) {
        this.name = name;
        if (!nameEnumMap.containsKey(name)) {
            nameEnumMap.put(name, this);
        }
    }

    public boolean equals(AbstractEnum abstractEnum) {
        return this.name == null || abstractEnum == null ? false : this.name.equals(abstractEnum.getName());
    }

    public String toString() {
        return this.name;
    }

    public static AbstractEnum valueOf(String name) {
        if (name == null)
            throw new NullPointerException("Name is null");

        AbstractEnum result = nameEnumMap.get(name);
        if (result != null) {
            return result;
        }

        throw new IllegalArgumentException(
                "No enum constant exists, name is." + name);
    }

    public static void init() {
    }

}

2、实际继承enum,与enum使用方法一致

public class TypeEnum extends AbstractEnum {

	private static final Map<String, TypeEnum> nameEnumMap = new ConcurrentHashMap<>();

	protected TypeEnum(String name) {
		super(name);
		if (!nameEnumMap.containsKey(name)) {
			nameEnumMap.put(name, this);
		}
	}

	public static TypeEnum valueOf(String name) {
		if (name == null)
			throw new NullPointerException("Name is null");

		TypeEnum result = nameEnumMap.get(name);
		if (result != null) {
			return result;
		}

		throw new IllegalArgumentException(
				"No enum constant exists, name is." + name);
	}

    public static final TypeEnum TYPE_ONE = new TypeEnum("TYPE_ONE");
}

3、可继续继承枚举,进行枚举分类。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值