Groovy 重写抽象枚举方法

Groovy 重写抽象枚举方法,groovy,enums,Groovy,Enums,以下是有效的Java代码: enum ProductType { CASH_BONUS { void doSomething() {} }, CUSTOMIZABLE { void doSomething() {} } abstract void doSomething() } 但是,当我尝试在Groovy控制台中运行此操作时,会出现以下错误: 中不能有抽象方法 非抽象类。班级 必须声明“ProductType” 抽象还是方法的

以下是有效的Java代码:

enum ProductType {
  CASH_BONUS { 

     void doSomething() {}    
  },

  CUSTOMIZABLE { 
     void doSomething() {}    
  }

  abstract void doSomething()
}
但是,当我尝试在Groovy控制台中运行此操作时,会出现以下错误:

中不能有抽象方法 非抽象类。班级 必须声明“ProductType” 抽象还是方法的无效 必须实现doSomething()。 在第:-1行,第:-1列

中不能有抽象方法 非抽象类。班级 必须声明“ProductType” 抽象还是方法的无效 doSomething()'不能是抽象的。 第11行第3列

我似乎记得读到Groovy(还)不支持枚举常量的重写方法,这是正确的吗?如果是,有没有一种优雅的方法来模拟这种行为

更新 这是一个在Groovy 1.8.0前后修复的bug,它是一个bug:

可以使抽象方法不抽象。抛出异常以确保始终覆盖它,如:

enum ProductType {
    CASH_BONUS(1) {
        void doSomething() {
        }
    },
    CUSTOMIZABLE(2) {
        void doSomething() {
        }
    };
    ProductType(int n) {
        this.n=n;
    }
    final int n;
    void doSomething() {
        throw new UnsupportedOperationException()
    }
}

ProductType.CASH_BONUS.doSomething();
ProductType.CUSTOMIZABLE.doSomething();

在eclipse中将Groovy编译从1.8更新到2.0对我来说很有用


(Eclipse3.7)

不幸的是,如果为枚举定义构造函数参数,这似乎不起作用。否则,这是一个很好的解决办法。