【问题标题】:Is it correct to override setter of domain property in grails?在 grails 中覆盖域属性的设置器是否正确?
【发布时间】:2014-04-30 15:45:24
【问题描述】:

在域类中重写属性的 setter 和 getter 是个好主意吗?假设我们有一个具有 name 属性和 capitalizedName 的域类,我们在其中存储清理名称:

class Person {
    String name
    String capitalizedName

    String setName(String name){
        this.name = name
        this.searchName = name.replaceAll("[^A-Za-z0-9 ]", "").trim().toUpperCase()
    }
}

如果我覆盖 setter 并在单元测试中尝试使用动态查找器:

Person.findByName('Whatever')

我明白了

java.lang.IllegalArgumentException: Property [name] is not a valid property of class [com.test.Person]

但在运行时它工作得很好。

我可以修改域类的 getter 和 setter 吗?实现上述行为的最佳方法是什么?

【问题讨论】:

    标签: unit-testing grails grails-orm grails-domain-class


    【解决方案1】:

    setter 的返回类型应该是void

     void setName(String name){
            this.name = name
            this.searchName = name.trim().replaceAll("[^A-Za-z0-9 ]", "").replaceAll(" +", " ").toUpperCase()
     }
    

    【讨论】:

    • 我没想到返回类型会是原因,但我试了一下,确实很重要。
    • 谢谢,没注意到。看起来我的代码库有很多这样的问题。
    猜你喜欢
    • 2014-10-31
    • 2019-07-28
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2017-08-29
    • 2014-03-11
    相关资源
    最近更新 更多