在Java中扩展枚举
我有一个枚举,让我们称之为A:
public enum A { A, B }
我有一个枚举A的函数:
public void functionA(A enumA) { //do something }
如何创建另一个枚举,可能调用B我可以传递给functionA ? 像这样的东西?
public enum B { C } functionA(BC);
我知道你不能扩展枚举,但我还有其他选择吗? 实现这一目标的最佳方法是什么?
你不能。
枚举类型是最终设计。
原因是每个枚举类型应该只包含在枚举中声明的元素 (例如,我们可以在switch语句中使用它们),如果允许扩展类型,这是不可能的。
你可能会这样做:
public interface MyInterface { // add all methods needed here } public enum A implements MyInterface { A, B; // implement the methods of MyInterface } public enum B implements MyInterface { C; // implement the methods of MyInterface }
请注意,无法使用此接口进行switch
。 (或者通常有一个带有一个可能来自多个enum
的对象的switch
)。
您可以实现通用接口
interface I { } enum A implements I { A, B } enum B implements I { C } public void functionA(I i) { //do something } obj.functionA(AA); obj.functionA(BC);
你不能让枚举扩展其他枚举,但你可以声明一个所有你的枚举可以实现的接口。 界面必须包含您希望在Enum值上调用的任何方法。 这是一个例子……
public class Question6511453 { public static void main(String[] args) { System.out.println(functionFoo(EnumA.FirstElem)); System.out.println(functionFoo(EnumA.SecondElem)); System.out.println(functionFoo(EnumB.ThirdElem)); } private interface MyEnums { int ordinal(); } private enum EnumA implements MyEnums { FirstElem, SecondElem } private enum EnumB implements MyEnums { ThirdElem } private static int functionFoo(MyEnums enumeration) { return enumeration.ordinal(); } }
这个解决方案唯一的问题是它会像你在switch语句中一样想要使用Enum,因为序数和值可能不再是唯一的。
这应该回答你的问题,但我怀疑它实际上会帮助你解决问题。 🙁
你应该将项目C添加到你的枚举A.如果它是不相关的东西并且添加它没有意义,functionA()可能不应该是处理它的人。