java - 总是使用 get 和 set 方法来访问类自己的成员字段是否属于反模式?

标签 java anti-patterns

<分区>

在 Java 类中,使用 getter 和 setter 访问成员字段被认为是好习惯还是坏习惯?

例如哪个更好:

public Order {
    private Agreement agreement;

    public Agreement getAgreement() {
    return agreement;
    } 

    public void process() {
       //should I use:
       getAgreement().doSomething();
       //Or:
       agreement.doSomething();
    }
}

一般来说,由于 KISS 原则,我认为直接访问该字段是最好的,而且有人可能会在以后重写 get 方法而导致不可预测的结果。

但是我的同事们认为最好保留一个抽象层。对此是否有共识?

最佳答案

老实说,在我看来,这取决于您使用它的目的。就个人而言,当有疑问时,我总是在那里保留额外的抽象级别,以防万一我需要稍后在子类中重写它。很多次我都免于重写类的痛苦,只是因为我留下了一个 getter 或 setter 可以覆盖。

另一件事是,其他客户/程序员可能需要以您尚未想到的方式使用您的类,例如,将 Agreement 类从数据库中拉出。在这种情况下,当他们覆盖您的类时,您已经让他们(或可能是 future 的您)轻松修改数据的检索方式。

因此,除非您绝对确定只有一种方法可以访问该字段,并且它是 100% 直接的,否则最好将值的检索和修改分离,以便在将来的某个时候您可以避免重写困难。

关于java - 总是使用 get 和 set 方法来访问类自己的成员字段是否属于反模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1095034/

相关文章:

WPF智能UI反模式: How much logic processing is appropriate in XAML?

java - hibernate 事务开始/回滚/提交与 session.clear()

java - ResourceBundle 示例不起作用

java - GraalVM 和 Jvm-Hotspot 的区别

java - 结合原始类型和泛型方法

javascript - Pub/Sub 中的发布者应该是同步还是异步?

scala - 将 ActorRef 传递给其他 Actor 是好是坏?

java - 如何加载带有数据的弹出窗口并将所选选项返回到原始表单

java - 如何处理滔天的Struts Actions?

c# - 属性初始化反模式