gpt4 book ai didi

switch 语句的 Java 扩展枚举

转载 作者:行者123 更新时间:2023-12-02 05:59:50 25 4
gpt4 key购买 nike

我有以下代码

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;
}
}

我在其他类(class)中使用它,如下

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;
}
}

我收到以下编译时间错误

Cannot switch on a value of type EnumInterface. Only convertible int values or enum variables are permitted.

我做了研究,发现如果我这样做,“switch”情况是不可能的。

最佳答案

在这种情况下,Switch 语句绝对不是您想要的。即使上面的示例有效,并且没有任何原因,您的结果也将是完全错误的。枚举上的开关使用枚举序数,0 表示 Enum1.A,1 表示 Enum1.B,0 表示 Enum2.C >,1 表示 Enum2.D 使用上面的类。您会明白为什么这是一个非常糟糕的主意。

您的 EnumInterface 类与 Java 类型 enum 没有任何关系,它只是定义实现它的任何类并提供您的 getTitle() 方法。这可以是 Enum1Enum2 或任何其他甚至可能不是 Enum 的类。所以当你想基于EnumInterface进行切换时,你需要问自己你到底想切换什么。这是您想要用作条件的标题,还是您定义的枚举是否带来了其他内容?

现在,我将给你一个毫无疑问的好处,并假设无论你想要做什么,它都需要通过枚举来关闭。我还假设您无法出于任何原因组合 Enum1Enum2 。以下是我为您精心设计的解决方案:

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
}

....
....

您几乎肯定需要根据需要使用的任何抽象模式进行重构,但以上是我根据我对您的代码的了解所能做的最好的事情。

关于switch 语句的 Java 扩展枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22765009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com