枚举构造函数只在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)
}
}
好的。所以我迷失了这个。任何帮助表示赞赏。
答
没有与您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
发布打印出来的实际错误将b e比关于错误的轶事更好 – 2012-03-14 19:56:09
您使用的是什么IDE?我已经看到Netbeans通过关于枚举的一些奇怪的错误。 – David 2012-03-14 20:06:32
SpringSource工具套件。它确实有一些奇怪的错误。虽然我的程序运行正常。我感到内疚。 – 2012-03-14 20:12:35