我有一个枚举,让我们称之为A:
public enum A
{
A,
B
}
Run Code Online (Sandbox Code Playgroud)
我有一个枚举A的函数:
public void functionA(A enumA)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
如何创建另一个枚举,可能调用B我可以传递给functionA?像这样的东西?
public enum B
{
C
}
functionA(B.C);
Run Code Online (Sandbox Code Playgroud)
我知道你不能扩展枚举,但我还有其他选择吗?实现这一目标的最佳方法是什么?
Paŭ*_*ann 48
你不能.
枚举类型是最终的设计.
原因是每个枚举类型应该只包含在枚举中声明的元素(例如,我们可以在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
}
Run Code Online (Sandbox Code Playgroud)
请注意,无法switch使用此接口执行此操作.(或者通常有一个switch对象可能来自多个enum).
Pet*_*rey 18
您可以实现通用接口
interface I { }
enum A implements I {
A, B
}
enum B implements I {
C
}
public void functionA(I i) {
//do something
}
obj.functionA(A.A);
obj.functionA(B.C);
Run Code Online (Sandbox Code Playgroud)
你不能让枚举扩展其他枚举,但你可以声明一个你的所有枚举可以实现的接口.接口必须包含您希望在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();
}
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案唯一的问题是它会像你在switch语句中一样想要使用Enum,因为序数和值可能不再是唯一的.
这应该回答你的问题,但我怀疑它实际上会帮助你解决问题.:(
| 归档时间: |
|
| 查看次数: |
69179 次 |
| 最近记录: |