首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >覆盖抽象枚举方法

覆盖抽象枚举方法
EN

Stack Overflow用户
提问于 2011-05-23 15:11:15
回答 2查看 2.4K关注 0票数 5

以下是有效的Java代码:

代码语言:javascript
运行
复制
enum ProductType {
  CASH_BONUS { 

     void doSomething() {}    
  },

  CUSTOMIZABLE { 
     void doSomething() {}    
  }

  abstract void doSomething()
}

但是,当我试图在Groovy控制台中运行这个程序时,我会得到以下错误:

不能在非抽象类中有抽象方法。类'ProductType‘必须声明为抽象类,或者必须实现方法'void doSomething()’。一行:-1,栏:-1

不能在非抽象类中使用抽象方法。类'ProductType‘必须声明为抽象的,或者方法'void doSomething()’不能是抽象的。一行: 11,栏:3

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

更新

这是一个修复了Groovy 1.8.0的错误

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-23 22:52:06

这是个bug:http://jira.codehaus.org/browse/GROOVY-4641

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

代码语言:javascript
运行
复制
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();
票数 4
EN

Stack Overflow用户

发布于 2012-12-11 03:01:10

在eclipse中将Groovy编译从1.8更新到2.0,对我起了作用

(月食3.7)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6099152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档