【问题标题】:"unexpected type" error when comparing enum values比较枚举值时出现“意外类型”错误
【发布时间】:2011-11-09 07:50:07
【问题描述】:

我见过的大多数遇到此问题的人都在需要 == 的地方使用 =。是什么导致了我的问题?

com\callmeyer\jopp\FieldCoordinator.java:303:意外类型 必需:类、包 发现:变量 if (event.getType() == event.Type.INSERT) { ^

枚举定义和访问器:

public class DataLayoutEvent {
    public static enum Type { INSERT, DELETE, RENAME, MOVE, RESIZE }

    private Type type = null;

    public Type getType() {
        return type;
    }

    ...
}

以及发生错误的方法:

public void layoutChanged(DataLayoutEvent event) {
    if (event.getType() == event.Type.INSERT) {
        fieldAdded(event.getField(), event.getToIndex());
    }

    ...

【问题讨论】:

    标签: java enums compiler-errors equals-operator


    【解决方案1】:

    使用静态访问而不是实例访问:

    if (event.getType() == DataLayoutEvent.Type.INSERT) {
    

    您可以(但不应该)对静态成员(方法和字段)使用实例访问,但不能对内部类型使用。

    【讨论】:

    • 呵呵,之前我还以为我用过非静态快捷方式成功了。也许这只适用于静态字段,不适用于嵌套类和枚举。
    【解决方案2】:

    应该是:

    // From within DataLayoutEvent
    if (event.getType() == Type.INSERT) {
    

    // From other classes
    if (event.getType() == DataLayoutEvent.Type.INSERT) {
    

    Type 部分是类型的名称 - 它不能由变量值限定 (event)。顺便说一句,如果您想使用其他地方的第一个表单,可以导入 DataLayoutEvent.Type

    【讨论】:

      【解决方案3】:

      我认为您需要以不同的方式引用Type

      if (event.getType() == DataLayoutEvent.Type.INSERT) { ... }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-28
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-13
        • 2013-12-23
        • 2011-03-03
        相关资源
        最近更新 更多