Java中不使用extends的可扩展枚举



可能重复:
是否可以扩展Java枚举?

我遇到了一个小问题,我有一个具有一定数量值的枚举。此枚举用于系统的多个部分,在某些情况下需要包含更多的值。

由于Java中不允许扩展枚举,我尝试了一些替代方案,到目前为止,我的解决方案是创建一个接口,其中包含一个枚举,该枚举的值对系统的所有部分都是通用的,然后创建一个空类来实现这个接口。

所以enum A implements I,所以我可以使用A.COMMON_ENUM.ENUM_VALUE

现在我可以在系统的某个子部分创建一个新的enum B,它包含一个枚举ADDITIONAL_ENUM,并实现I。所以现在我可以使用这个:

B.COMMON_ENUM.ENUM_VALUE

B.ADDITIONAL_ENUM.ADDED_ENUM_VALUE

这是一个丑陋的解决方案吗?-我的意思是,它是有效的,但似乎是错误的。。。

-----更新:-----

通用枚举位于系统的"核心"部分(可以有多个前端(,每个前端的附加枚举都不同。所以打个比方:假设VEHICLE枚举有ENGINE、DOORS,然后在我的CAR前端我需要添加"WHEELS",在我的BOAT前端我需要增加"PROPELLER">

代码示例:

public interface EnumType {           // I
    public enum Core {
    VALUE1,
    VALUE2,
    VALUE3
    }
}
public enum CommonEnum implements EnumType {     // A
}
public enum AdditionalEnumType implements EnumType {     // B
    public enum Additional {
    VALUEX,
    VALUEY
    }
}

我会使用类似的模式,但我不明白为什么你的嵌套中有这么多。我的应该是这样的:

interface SomeType {
  String name();
}
public enum CoreEnum implements SomeType {
  VALUE1,
  VALUE2;
}
public enum AdditionalEnum implements SomeType {
  VALUE3,
  VALUE4;
}

您可能会为此目的阅读有关typesafe枚举模式的信息。你介绍界面还可以。因此,您应该只依赖于API中的那个接口。如果该接口的实现是由enum或类完成的,那么API用户应该不关心它。

我看不出有什么不好的地方。

您可以通过设计创建类似于enum的自己的类

public class A {
    A() {}  
    public static final A A1 = new A();
    public static final A A2 = new A();
    @Override
    public String toString() {
        return getClass().getSimpleName();
    }
}
public class B extends A {
    B() {}
    public static final A A3 = new A();
}

相关内容

  • 没有找到相关文章

最新更新