枚举构造函数只在enum类中允许调用ara

问题描述:

我正在开发一个grails项目。现在我有一个非常令人不安的问题。我有一个名为状态像这样的枚举:枚举构造函数只在enum类中允许调用ara

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控制器,这是我不断收到错误说“枚举构造函数调用只允许枚举类内部”的事情是:我做的不要从控制器类中调用枚举构造函数!这是它:

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) 
    } 
} 

好的。所以我迷失了这个。任何帮助表示赞赏。

+1

发布打印出来的实际错误将b e比关于错误的轶事更好 – 2012-03-14 19:56:09

+0

您使用的是什么IDE?我已经看到Netbeans通过关于枚举的一些奇怪的错误。 – David 2012-03-14 20:06:32

+0

SpringSource工具套件。它确实有一些奇怪的错误。虽然我的程序运行正常。我感到内疚。 – 2012-03-14 20:12:35

没有与您Status类的定义的几个问题,虽然我不知道,如果这些是你的问题的原因

​​

重新定义这个类作为

enum Status { 

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

    String type 

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

    String toString() { 
     return this.type 
    } 
} 

和使用values()而不是删除的list()方法,也许你的问题将消失

+0

不,它没有工作。感谢您的提示,但(+1)。这很有趣,因为TesterController(编译器说错误的类)本身不使用枚举。它使用Tester类,它使用Status枚举。现在对我来说有点神秘莫测。 – 2012-03-15 18:19:17