为什么交换机原因无法解决错误?

时间:2011-12-13 04:19:43

标签: java eclipse if-statement osgi switch-statement

我在包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);
}

3 个答案:

答案 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