最近在封装一个第三方类库。
其中要用到类库中提供了很多枚举,出于 不想暴漏类库 且 要限制类库中某些枚举值的使用 的目的,故想到了 继承一遍枚举。
又因为 java 的枚举类型是不支持继承的(至少我这的 jre 不支持),所以想到了 使用实现接口 来达到目的。
- 首先,类库中的枚举:
public enum P1Enum { A, B, C; } public enum P2Enum { AA, BB, CC; } - 然后,自己写的接口
interface IParent<T> { T getParent(); } - 再然后,子类实现接口
public enum P1S1Enum implements IParent<P1Enum> { A, B; @Override public P1Enum getParent() { return P1Enum.valueOf(this.name()); } } public enum P1S2Enum implements IParent<P1Enum> { B, C; @Override public P1Enum getParent() { return P1Enum.valueOf(this.name()); } } public enum P2S1Enum implements IParent<P2Enum> { AA, CC; @Override public P2Enum getParent() { return P2Enum.valueOf(this.name()); } } - 这样做,确实可以实现目的
然后问题来了,
- 1.每一个枚举都需要
@Override getParent(), 是否可以通过接口默认实现来解决呢?
以下这一段代码不正确,因为我不会写了,当然问题就在这里。
interface IParent<T extends Enum<T>> { default T getParent() { return T.valueOf(null, "A"); } } - 2.有没有更好的实现方式呢?
先谢答。么么哒~
