首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >枚举构造函数只允许在枚举类内部调用ara

枚举构造函数只允许在枚举类内部调用ara
EN

Stack Overflow用户
提问于 2012-03-15 03:16:33
回答 1查看 2.7K关注 0票数 2

我正在做一个grails项目。现在我有一个非常令人不安的问题。我有一个名为Status的枚举,如下所示:

代码语言:javascript
复制
enum Status {

    ENABLED("Habilitado"), DISABLED ("Desabilitado")

    String type

    private Status(String type) {
        this.type = type
    }

    def String toString() {
        return this.type
    }

    static list() {
        [ENABLED, DISABLED]
    }
}

我还有一个名为TesterController的控制器,在那里我不断收到错误,说“枚举构造函数调用只允许在枚举类内部”问题是:我没有从控制器类内部调用枚举构造函数!这就是它:

代码语言:javascript
复制
class TesterController {

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

    def index() {
        redirect(action: "list", params: params)
    }

    def list() {
        def minElems = 10

        if(params.max) minElems = params.int('max')

        params.max = Math.min(minElems, 100)

        [testers: Tester.list(params), testerTotal: Tester.count()]
    }

    def create() {
        [tester: new Tester(params)]
    }

    def save() {
        def tester = new Tester(params)
        if (!tester.save(flush: true)) {
            render(view: "create", model: [tester: tester])
            return
        }

        flash.message = message(code: 'ateweb.created.message', args: [tester.name])
        redirect(action: "show", id: tester.id)
    }

    def show() {
        def tester = Tester.get(params.id)
        if (!tester) {
            flash.message = message(code: 'ateweb.not.found.message', args: [message(code: 'tester.label', default: 'Tester'), params.name])
            redirect(action: "list")
            return
        }

        [tester: tester]
    }

    def edit() {
        def tester = Tester.get(params.id)
        if (!tester) {
            flash.message = message(code: 'ateweb.not.found.message', args: [message(code: 'tester.label', default: 'Tester'), params.name])
            redirect(action: "list")
            return
        }

        [tester: tester]
    }

    def update() {
        def tester = Tester.get(params.id)
        if (!tester) {
            flash.message = message(code: 'ateweb.not.found.message', args: [message(code: 'tester.label', default: 'Tester'), params.name])
            redirect(action: "list")
            return
        }

        if (params.version) {
            def version = params.version.toLong()
            if (tester.version > version) {
                tester.errors.rejectValue("version", "ateweb.optimistic.locking.failure",
                      [message(code: 'tester.label', default: 'Tester')] as Object[],
                      "Another user has updated this Tester while you were editing")
                render(view: "edit", model: [tester: tester])
                return
            }
        }

        tester.properties = params

        if (!tester.save(flush: true)) {
            render(view: "edit", model: [tester: tester])
            return
        }

        flash.message = message(code: 'ateweb.updated.message', args: [tester.name])
        redirect(action: "show", id: tester.id)
    }
}

好的。因此,我对此感到迷惑。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2012-03-15 18:04:42

您的Status类的定义有一些问题,尽管我不知道这些是否是您的问题的原因

代码语言:javascript
复制
enum Status {

    ENABLED("Habilitado"), DISABLED ("Desabilitado")

    String type

    // delcaring the constructor private doesn't make much sense because
    // enum constuctors can never be called outside the class
    private Status(String type) {
        this.type = type
    }

    // return type is declared as both def (Object) and String
    def String toString() {
        return this.type
    }

    // this is identical to the automatically-generated values() method
    static list() {
        [ENABLED, DISABLED]
    }
}

将这个类重新定义为

代码语言:javascript
复制
enum Status {

    ENABLED("Habilitado"), DISABLED ("Desabilitado")

    String type

    Status(String type) {
        this.type = type
    }

    String toString() {
        return this.type
    }
}

并且使用values()而不是已删除的list()方法,也许您的问题就会消失

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

https://stackoverflow.com/questions/9708661

复制
相关文章

相似问题

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