在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()可能不应该是处理它的人。