java - java中具有逻辑的setter

标签 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;
    }

}

这是一个持久对象。

我对在构造函数中设置数据没问题,但是消息的文本字段可以在创建对象后设置,并且当设置文本时,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 引擎的应用程序中,在重新读取/写入对象时会不断调用此 setter ,因此也想知道这是否实用/高效。

最佳答案

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

关于java - java中具有逻辑的setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22636153/

相关文章:

javascript - ES6 setter - 保持对象干净//将参数映射到实例对象上

properties - Getter 和 Setter 应该做什么和不应该做什么

java - Hibernate 或 JDBC 的写操作性能

java - 无法在 ubuntu 18.04 上启动 dbeaver

java - 如何模拟InputStream和ByteString

c# - 如何从另一个类的静态方法(即只有一个对象)调用实例方法?

java - JNA GetExitCodeProcess() 工作异常

php - 未找到 autoload.php 类

javascript - 有条件地向 JavaScript 对象添加属性

c++ - c++中 vector 和列表的setter和getter