当前位置:  开发笔记 > Android > 正文

Grails getSomething(int i)方法无法编译

如何解决《GrailsgetSomething(inti)方法无法编译》经验,为你挑选了2个好方法。

有人能告诉我为什么这个Grails域类不会编译(在运行时)?

class Person {
    String name

    String getSomething(int i) {
    }
}

我运行时遇到此错误grails run-app:

2008-12-27 15:26:33.955::WARN:  Failed startup of context org.mortbay.jetty.webapp.WebAppContext@187e184{/asrs2,C:\Steve\asrs2/web-app}
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
        at java.security.AccessController.doPrivileged(Native Method)
        at RunApp_groovy$_run_closure2_closure7.doCall(RunApp_groovy:67)
        at RunApp_groovy$_run_closure2_closure7.doCall(RunApp_groovy)
        at Init_groovy$_run_closure6.doCall(Init_groovy:131)
        at RunApp_groovy$_run_closure2.doCall(RunApp_groovy:66)
        at RunApp_groovy$_run_closure2.doCall(RunApp_groovy)
        at RunApp_groovy$_run_closure1.doCall(RunApp_groovy:57)
        at RunApp_groovy$_run_closure1.doCall(RunApp_groovy)
        at gant.Gant.dispatch(Gant.groovy:271)
        at gant.Gant.this$2$dispatch(Gant.groovy)
        at gant.Gant.invokeMethod(Gant.groovy)
        at gant.Gant.processTargets(Gant.groovy:436)
        at gant.Gant.processArgs(Gant.groovy:372)
Caused by: java.lang.NullPointerException
        at java.lang.Class.isAssignableFrom(Native Method)
        ... 13 more

如果我将方法更改getSomethingdoSomething然后它可以工作.被getSomething(int i)莫名其妙地被当作一个bean的方法?

跟进:这是一个Grails错误,将在1.2中修复.



1> billjamesdev..:

嗯,你有两个问题:

    Grails中的域类尝试确保每个属性在启动期间都具有getter和setter.它通过查找所有getter并确保存在适当的setter来实现此目的.所以,如果你有一个getSomething(),你必须有一个setSomething(def something),即使类中没有属性"something".实际上,通过创建getSomething()函数,您已经暗示存在这样的属性,并且您还必须创建一个setSomething().

    吸气者不接受争论.你的.现在我意识到你在编写它时并不认为这是一个"吸气剂",但是你的命名使它成为一个.

最好的选择?不要使用"get"或"set"或"is"前缀,除非你真的在制作一个可以获取和设置的完整属性.我也会避免在Domain类中"查找",因为它有自己的一组生成方法.



2> Matthew Tayl..:

几个笔记......

如果您提供了一个二传手,那么您也不必提供一个吸气剂.反之亦然.你真正做的是覆盖Groovy附加的默认访问器方法.如果您愿意,可以覆盖一个而不是另一个.

如果你在你的域类中以'find'开头的方法没有问题,因为动态查找器方法实际上是静态方法添加(并且它们都以'findBy*'开头).

瞬态解决方案不起作用.使'某事'成为一个瞬态值并不能帮助你获得一个带有错误参数签名的getter这一事实.动态键入返回值时也是如此.

对于Groovy来说这不是问题,但对于Grails来说.

我认为解决方案是将您的方法名称从getSomething更改findSomething或您不喜欢的任何不符合约定的内容.以下工作正常:

class Person {
    String name

    String findSomething(int i) {
    }
}

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有