Java 为什么切换导致无法解决错误?
我在包A中有一个枚举,它有一个静态转换器方法,我使用该方法为另一个包B中的一组特定类获取适当的枚举类型(另一个包中的每个类都有一个对应的枚举) 现在,从第三个包C,它不导入包a,但导入包B,我试图打开枚举 现在,当我使用Java 为什么切换导致无法解决错误?,java,eclipse,if-statement,osgi,switch-statement,Java,Eclipse,If Statement,Osgi,Switch Statement,我在包A中有一个枚举,它有一个静态转换器方法,我使用该方法为另一个包B中的一组特定类获取适当的枚举类型(另一个包中的每个类都有一个对应的枚举) 现在,从第三个包C,它不导入包a,但导入包B,我试图打开枚举 现在,当我使用开关检查枚举时,它会抱怨: 无法解析类型nz.ac.waikato.jstar.jstar.OrderOperator。它是从required.class间接引用的 档案 但是,当我使用if语句时,它不会 有人能解释一下为什么开关会导致错误,而如果不会导致错误吗 代码: 枚举引用
开关检查枚举时,它会抱怨:
无法解析类型nz.ac.waikato.jstar.jstar.OrderOperator。它是从required.class间接引用的
档案
但是,当我使用if语句时,它不会
有人能解释一下为什么开关
会导致错误,而如果
不会导致错误吗
代码:
枚举引用捆绑包A的静态方法(OrderOperator来自捆绑包A):
公共静态OrderingConnectionType getType(类将OrderingConnectionType.prefix添加到开关的大小写中,它将起作用。您应该给出要比较的确切枚举类型。.您在if语句中执行此操作,而不是在开关中执行此操作
switch (connection.getType()) {
case OrderingConnectionType.LESS_THAN:
break;
case OrderingConnectionType.LESS_THAN_EQUALS:
break;
default:
break;
}
检查您的导入语句。“小于”和“小于等于”枚举值可能是从类型nz.ac.waikato.jstar.jstar.OrderOperator
导入的,而不是您自己的OrderingConnectionType
查看教程-实际上,当我尝试此操作时,它给出了一个不同的错误:“限定的事例标签OrderingConnectionType.LESS_THAN必须替换为限定的枚举常量LESS_THAN”否,OrderOperator是一个具有两个子类的超类-OrderLessThan和OrderLessThanEqual。
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);
}
switch (connection.getType()) {
case OrderingConnectionType.LESS_THAN:
break;
case OrderingConnectionType.LESS_THAN_EQUALS:
break;
default:
break;
}