1

可能重复:
是否可以扩展 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 前端我需要添加“轮子”,在我的 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
    }
}
4

3 回答 3

6

我会使用类似的模式,但我不明白为什么你的所有嵌套都在你的。我的看起来像这样:

interface SomeType {
  String name();
}

public enum CoreEnum implements SomeType {
  VALUE1,
  VALUE2;
}

public enum AdditionalEnum implements SomeType {
  VALUE3,
  VALUE4;
}
于 2013-01-17T10:41:30.343 回答
1

为此,您可能会阅读有关类型安全枚举模式的信息。介绍界面没问题。因此,您应该只依赖 API 中的该接口。如果该接口的实现是由枚举或类完成的,您的 API 用户应该不关心。

我看不出有什么不好的。

于 2013-01-17T08:56:21.540 回答
0

您可以通过设计创建自己的类似于 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();
}
于 2013-01-17T09:42:54.743 回答