gpt4 book ai didi

Java - 如何使用类型安全枚举作为 switch-case 语句?

转载 作者:行者123 更新时间:2023-12-01 19:52:49 25 4
gpt4 key购买 nike

我正在开发一个 Java 程序,我必须使用以下 TypeSafeEnum (在外部组件中给出):

public class MyInterfaceTypeEnum
extends TypeSafeEnum
{
public MyInterfaceTypeEnum(String paramString, int paramInt)
{
super(paramString, paramInt);
}

public static final MyInterfaceTypeEnum UNKNOWN = new MyInterfaceTypeEnum("UNKNOWN", 0);
public static final MyInterfaceTypeEnum TCP = new MyInterfaceTypeEnum("TCP", 10);
public static final MyInterfaceTypeEnum UDP = new MyInterfaceTypeEnum("UDP", 20);
public static final MyInterfaceTypeEnum IPX = new MyInterfaceTypeEnum("IPX", 30);
public static final MyInterfaceTypeEnum RS232 = new MyInterfaceTypeEnum("RS232", 40);
}

我的任务流程类具有以下方法:

private void processInterface(MyInterfaceTypeEnum type)
{
switch(type)
{
case RS232:
{
// do action
break;
}
case TCP:
case UDP:
{
// do action
break;
}
case IPX:
{
// do action
break;
}
case UNKNOWN:
default:
{
// do default action
break;
}
}
}

编译器在 switch 语句行上失败,并显示以下消息:

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

我用谷歌搜索,但到处都写着:这个 TypeSafeEnum 模式可能没问题。请给我一些解决这个问题的想法。

更新:

值得一提的是:我无法更改 MyInterfaceTypeEnum 的实现(它是已使用(导入)组件的一部分)。因此我被迫使用它。所以,基本情况是:“enum”(误用的类)已经给出。

如果我放弃使用MyInterfaceTypeEnum,我也将无法使用很多函数(那些大量使用这种类型安全枚举的函数)。所以我别无选择,只能接受这个事实,并尝试寻找最简单的可能性。

我知道,可以使用if-else语句树。但我想避免这种情况。由于 MyInterfaceTypeEnum 是在外部组件中添加的(由其他人实现,我无法更改它)。

最佳答案

自 java 1.5 起,Java 支持枚举

public enum Protocols {
TCP,
UDP,
PCX
}

....
void processInterface(Protocols proto) {

switch(proto) {
case TCP: ...
case UDP: ...
}
}

关于Java - 如何使用类型安全枚举作为 switch-case 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50738399/

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