我在包A中有一个枚举,它有一个静态转换器方法,我用它来为另一个包B中的一组特定类获取适当的枚举类型(另一个包中的每个类都有一个相应的枚举)。 / p>
现在,来自第三个软件包C,它不导入软件包A,但导入软件包B我试图打开枚举。
现在,当我使用switch
检查枚举时,它会抱怨:
无法解析类型nz.ac.waikato.jstar.jStar.OrderOperator。它是从必需的.class中间接引用的 文件
但是,当我使用if语句时,它不会。
任何人都可以了解switch
导致错误的原因,但if
没有?
代码:
//Doesn't work
switch (connection.getType()) {
case LESS_THAN:
break;
case LESS_THAN_EQUALS:
break;
default:
break;
}
//Works Fine
if(connection.getType() == OrderingConnectionType.LESS_THAN) {
return -1;
} else if(connection.getType() == OrderingConnectionType.LESS_THAN_EQUALS) {
return 2;
}
Enum的静态方法引用包A(OrderOperator来自Bundle A):
public static OrderingConnectionType getType(Class<? extends OrderOperator> operatorType) {
for (OrderingConnectionType type : OrderingConnectionType.values()) {
if(type.operatorType.isAssignableFrom(operatorType)) return type;
}
throw new IllegalArgumentException("Unknown Operator type: " + operatorType);
}
答案 0 :(得分:1)
添加OrderingConnectionType。对于开关的情况的前缀,它将起作用。
答案 1 :(得分:1)
你应该给出确切的枚举类型进行比较..你是在if statement
而不是switch
中这样做的。
switch (connection.getType()) {
case OrderingConnectionType.LESS_THAN:
break;
case OrderingConnectionType.LESS_THAN_EQUALS:
break;
default:
break;
}
答案 2 :(得分:0)
检查您的import语句。 LESS_THAN和LESS_THAN_EQUALS枚举值可能是从nz.ac.waikato.jstar.jStar.OrderOperator
类型导入的,而不是您自己的OrderingConnectionType
。