Java中的逻辑的二传手

dre*_*dre 4 java oop setter getter-setter

考虑一下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;
    }

}
Run Code Online (Sandbox Code Playgroud)

这是一个持久的对象。

我在构造函数中设置数据没有问题,但是可以在创建对象之后设置消息的文本字段,并且在设置文本时,此后还可以对containsDigit字段进行查询。显而易见的方法是在设置器中:

public void setText(String text) {
     // presume existence of method to check for digit
     if(text.containsDigit())
         this.containsDigit = true;

     this.text = text;
}
Run Code Online (Sandbox Code Playgroud)

但这是否会由于setter方法中的逻辑而导致任何“最佳实践”警报响起?

有人会建议替代实施吗?

编辑

我可能应该补充一点,该containsDigit字段是必需的,因为该对象是持久性的,因此containsDigit可以随后查询该字段。另外,在使用Spring / Hibernate引擎的应用程序中,在重新读取/写入对象时会不断调用此setter,因此也想知道这样做的实用性/效率。

Kla*_*äck 7

您的情况正是使用setter和getter的原因。如果不允许在setter中使用逻辑,那么最好直接访问这些字段!