作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 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/
我是一名优秀的程序员,十分优秀!