【发布时间】:2014-03-25 13:30:58
【问题描述】:
考虑在 Java 中存储一些文本的 Message 对象。
public class Message {
private String text;
private boolean containsDigit;
public Message() {
//constructor
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public boolean isContainsDigit() {
return containsDigit;
}
}
这是一个持久化对象。
我对在构造函数中设置数据没有任何问题,但是可以在创建对象之后设置 Message 的文本字段,并且在设置文本时,此后 containsDigit 字段也应该是可查询的。 显而易见的方法是在 setter 中:
public void setText(String text) {
// presume existence of method to check for digit
if(text.containsDigit())
this.containsDigit = true;
this.text = text;
}
但这是否会导致由于 setter 方法中的逻辑而导致任何“最佳实践”警报响起?
有人会建议替代实现吗?
编辑
我可能应该补充一点,containsDigit 字段是必需的,因为该对象是持久的,因此可以随后查询 containsDigit 字段。
此外,在使用 Spring/Hibernate 引擎的应用程序中,在重新读取/写入对象时会不断调用此设置器,因此也想知道它的实用性/效率。
【问题讨论】:
-
嗯,这就是使用 seter 和 getter 的全部目的 - 以便封装和防止直接访问可能不一致的字段。
-
这就是二传手的重点:)
-
对于“这是获取者和设置者的重点”的人。还有另一种说法,“专家”说他们应该仅用作评估者,因此纯粹是为了访问变量的值。否则他们可以“隐藏”代码中的问题/错误。
-
你能指出对这个叙述的引用吗?我怀疑它适用于不属于您的问题的不变性。
标签: java oop setter getter-setter