在域类中覆盖属性的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吗?如上所述,实现行为的最佳方式是什么?
答案 0 :(得分:4)
setter的返回类型应为void
void setName(String name){
this.name = name
this.searchName = name.trim().replaceAll("[^A-Za-z0-9 ]", "").replaceAll(" +", " ").toUpperCase()
}