当前位置: 首页 > 面试题库 >

是否总是使用get和set方法来访问类自己的成员字段,这是一种反模式?[重复]

龙兴学
2023-03-14
问题内容

在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方法,并产生不可预测的结果。

但是,我的同事认为,最好保留抽象层。对此有共识吗?


问题答案:

这里的核心问题是直接字段访问不符合子类重写方法,AOP,动态代理等的拦截条件。根据情况,这可能是好事,也可能是坏事。我要说的是,在内部使用getter和setter并不是反模式或模式。根据情况和班级的设计,这是好事还是坏事。



 类似资料:
  • 请问具体语法树的样式是否唯一的?比如如下的使用()和缩进来表示定义一个具体syntax tree:

  • 问题内容: 我经常发现自己需要过滤a 或使用谓词来检查给定字段是否具有给定值。 比如说我有这个POJO: 我想根据的值过滤对象的: 是否会有一种方便的方法来为该方法生成谓词?我注意到有,但不符合需要。 我可以很容易地这样写: 并将其用作: 但我希望尽可能重用JDK中的现有方法。 问题答案: 没有内置的工厂方法,您可以通过查看JFC中的所有用法并查找“ …中返回谓词的方法” 来轻松检查。除了自身内部

  • 我有一个包含上述对象的集合 现在,如果我继续将对象添加到集合中,它是否会根据每个元素的值自动删除重复项?(我理解它在内部使用重写的equals和hashCode方法)。 最终集不应包含任何基于每个字段相等的重复。

  • 问题内容: 在Java类上使用反射来访问所有字段,方法等:这些元素是否有标准化的顺序(在某些标准中指定)? 当然,我可以凭经验进行检查,但是我需要知道它是否始终相同。 编辑: 我等了一个问题:我需要什么命令;)长话短说:我有带JAXB注释的类,并且不想在视觉上表示这些类。尽管XML属性的顺序与XML标准或JAXB都不相关,但我想为视觉表示确定XML属性的顺序。例如:开始在结束之后。这伤害了自己的直

  • 问题内容: 这是我的情况: 逻辑很简单。“ SomeBaseClass”是我无法修改的第三方工具。我想限制其功能,并且不想允许foo(String strs [])。 问题是在SomeBaseClass内部foo(Sting str)内部调用foo(String strs [])。因此,当我调用MyClass的foo(String str)时,出现运行时异常。我该如何告诉SomeBaseClass

  • 本文向大家介绍属性和public字段的区别是什么?调用set方法为一个属性设值,然后用get方法读取出来的值一定是set进去的值吗?相关面试题,主要包含被问及属性和public字段的区别是什么?调用set方法为一个属性设值,然后用get方法读取出来的值一定是set进去的值吗?时的应答技巧和注意事项,需要的朋友参考一下 属性可以对设值、取值的过程进行非法值控制,比如年龄禁止设值负数,而字段则不能进行