我有以下代码
public interface EnumInterface{
public String getTitle();
}
public enum Enum1 extends EnumInterface{
private String title;
Enum1(String title){
this.title = title;
}
A("Apple"),B("Ball");
@Override
public String getTitle(){
return title;
}
}
public enum Enum2 extends EnumInterface{
private String title;
Enum1(String title){
this.title = title;
}
C("Cat"),D("Doll");
@Override
public String getTitle(){
return title;
}
}
我在其他课程中使用它如下
private EnumInterface[] enumList;//declared globally.
if(flagTrue){
enumList = Enum1.values();
}else{
enumList = Enum2.values();
}
....
....
private method1(int position){
switch(enumList[postion]){
case A:....
break;
case B:....
break;
case C:....
break;
case D:....
break;
}
}
我收到以下编译时错误
无法打开EnumInterface类型的值。只允许使用可转换的int值或枚举变量。
我做了我的研究,发现如果我这样做,'切换'的情况是不可能的。
答案 0 :(得分:2)
在这种情况下,Switch语句绝对不是您想要的。即使上面的例子有效,并且没有理由,你的结果也会完全错误。枚举上的开关使用枚举序号,Enum1.A
为0,Enum1.B
为1,Enum2.C
为0,Enum2.D
为1,使用上面的类。你可以看出为什么这会是一个非常糟糕的主意。
您的EnumInterface
类不以任何方式与Java类型enum
绑定,它只定义实现它的任何类并提供您的getTitle()
方法。这可能是Enum1
,Enum2
或任何其他甚至可能不是枚举的类。因此,当您想要根据EnumInterface
进行切换时,您需要问问自己实际想要打开的内容。它是您想要作为条件使用的标题,还是您定义的枚举会带来其他内容?
现在,我将为您提供怀疑的好处,并假设无论您想要做什么,都需要锁定Enum。我还假设您无论出于何种原因都无法合并Enum1
或Enum2
。以下是我完全过度设计的解决方案:
public interface EnumInterface {
public String getTitle();
public void processEvent(SwitchLogicClass e);
}
public enum Enum1 implements EnumInterface{
A("Apple"){
public void processEvent(SwitchLogicClass e){
//Any A specific Logic
e.doSomethingA();
}
},
B("Ball"){
public void processEvent(SwitchLogicClass e){
//Any B specific Logic
e.doSomethingB();
}
};
private String title;
Enum1(String title){
this.title = title;
}
@Override
public String getTitle(){
return title;
}
}
重复Enum2。假设下一个类名为SwitchLogicClass
private EnumInterface[] enumList;//declared globally.
if(flagTrue){
enumList = Enum1.values();
}else{
enumList = Enum2.values();
}
....
....
private method1(int position){
EnumInterface[position].processEvent(this);
}
public void doSomethingA(){
//Whatever you needed to switch on A for
}
public void doSomethingB(){
//Whatever you needed to switch on B for
}
....
....
你几乎肯定需要根据你需要使用的抽象模式进行重构,但上面是我能用你所知道的代码做的最好的。
答案 1 :(得分:0)
使用简单的java enum
可以完成哪些扩展工作?
您可以使用if else
块并调用equals
方法。