gpt4 book ai didi

java - 考虑到对象封装,getter 应该返回一个不可变的属性吗?

转载 作者:太空狗 更新时间:2023-10-29 22:33:22 25 4
gpt4 key购买 nike

当 getter 返回一个属性时,例如返回一个包含其他相关对象的 List,该列表及其对象是否应该是不可变的,以防止类外部的代码改变这些对象的状态,在主父对象不知道的情况下?

例如,如果一个 Contact 对象有一个 getDetails getter,它返回 ContactDetails 对象的 List ,然后调用该 getter 的任何代码:

  1. 可以在 Contact 对象不知道的情况下从该列表中删除 ContactDetail 对象。
  2. 可以在 Contact 对象不知道的情况下更改每个 ContactDetail 对象。

那么我们应该怎么做呢?我们应该只相信调用代码并返回容易可变的对象,还是走艰难的路,为每个可变类创建一个不可变类?

最佳答案

这是一个你是否应该在你的代码中“防御”的问题。如果您是类(class)的(唯一)用户并且您相信自己,那么无论如何都不需要不变性。但是,如果此代码无论如何都需要正常工作,或者您不信任您的用户,那么请将外部化的所有内容设为不可变。

也就是说,我创建的大多数属性都是可变的。偶尔会有用户搞砸,但这又是他/她的错,因为有明确的记录表明,突变不应该通过通过 getter 接收的可变对象发生。

关于java - 考虑到对象封装,getter 应该返回一个不可变的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/114237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com