覆盖抽象枚举方法

Dón*_*nal 5 groovy enums

以下是有效的Java代码:

enum ProductType {
  CASH_BONUS { 

     void doSomething() {}    
  },

  CUSTOMIZABLE { 
     void doSomething() {}    
  }

  abstract void doSomething()
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在Groovy控制台中运行它时,我得到错误:

在非抽象类中不能有抽象方法.必须将类"ProductType"声明为abstract或必须实现方法"void doSomething()".at line:-1,column:-1

在非抽象类中不能有抽象方法.必须将类"ProductType"声明为abstract,否则方法"void doSomething()"必须不是抽象的.在行:11,列:3

我似乎记得读过Groovy(尚未)支持枚举常量的重写方法,这是正确的,如果是这样,是否有一种优雅的方式来模拟这种行为?

更新

这是一个围绕Groovy 1.8.0修复的错误

Ray*_*yek 4

这是一个错误:http ://jira.codehaus.org/browse/GROOVY-4641

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

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();
Run Code Online (Sandbox Code Playgroud)