覆盖抽象枚举方法

时间:2011-05-23 15:11:16

标签: groovy enums

以下是有效的Java代码:

enum ProductType {
  CASH_BONUS { 

     void doSomething() {}    
  },

  CUSTOMIZABLE { 
     void doSomething() {}    
  }

  abstract void doSomething()
}

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

  

不能有一个抽象的方法   非抽象类。班级   必须声明'ProductType'   摘要或方法'无效   必须实现doSomething()'。   at line:-1,column:-1

     

不能有一个抽象的方法   非抽象类。班级   必须声明'ProductType'   摘要或方法'无效   doSomething()'不能是抽象的。   在行:11,列:3

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

更新

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

在为我工作的eclipse中将Groovy Compile从1.8升级到2.0

(Eclipse 3.7)