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

考虑到对象封装,吸气剂是否应返回不可变的属性?

马银龙
2023-03-14
问题内容

当getter返回一个属性(例如返回List其他相关对象的a)时,该列表及其对象是否应该是不可变的,以防止类外部的代码更改这些对象的状态而又不知道主要的父对象?

例如,如果一个Contact对象,具有getDetails吸气剂,它返回一个ListContactDetails目的,那么任何码调用该吸气剂:

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

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


问题答案:

这取决于您是否应该在代码中“防御”。如果您是班级的(唯一)用户,并且您信任自己,那么就绝对不需要不变性。但是,如果此代码无论如何都需要工作,或者您不信任用户,则使所有外部化的东西都不可变。

也就是说,我创建的大多数属性都是可变的。偶然的用户会对此造成破坏,但这又是他/她的错,因为有据可查地证明,不应通过通过吸气剂接收的可变对象发生突变。



 类似资料:
  • 问题内容: 我在读这篇文章,了解为什么和邪恶。本文没有说过 不要 使用它们,而是告诉您以限制使用这些方法的方式进行思考,或者引用该文章: 不要要求您进行工作所需的信息;询问具有信息的对象为您完成工作。 当您需要在GUI中显示数据但没有getter方法时会发生什么?本文简要介绍了这一点,但并不完整。它提到将JComponent传递给类,但是如果您要进行GUI更改,则可能需要进行很多工作才能修复。 例

  • 问题内容: 有人可以帮助我迅速了解正确使用吸气剂和吸气剂的方法。我对它的印象与说Java不一样。 这是Swift中用于存储和访问类变量的正确用法吗? 问题答案: 斯威夫特提供了更结构化的方法来和比Java。 你可以,但你应该 不会 ,写getter和setter方法就像你在你的代码一样。 相反,(如果您使用)只需声明可见性为non的属性即可(例如,在我的示例中)。这样,您班级外的呼叫者将可以查看属

  • 问题内容: 我有一堂课,看起来像下面这样: 我的hibernate映射文件按如下所示映射属性: 我收到以下错误: 看来hibernate不喜欢我的大写字母。我该如何解决? 问题答案: 应该管用…

  • 问题内容: 基本上,我需要能够做到这一点: 我正在寻找一个等于 或{get}的“全局”对象,以便为所有未定义的属性获取器返回一个空字符串(请注意,这与的属性不同)。 问题答案: 您可以创建一个a,以在访问未定义的属性时返回空字符串。 : 正如问题作者David Murdoch指出的那样,如果您使用的是节点v0.6.18(撰写本文时是最新的稳定版本),则在运行脚本时必须传递该选项: 请注意,此解决方

  • 问题内容: 我知道Java中关于布尔型getter的约定包括前缀“ is”。 但是,如果主题是复数呢?也就是说,如果我不想知道某个商店是否已营业,而又想知道所有商店是否已营业怎么办? 用英语没有意义。 我很想写这样的getter: 我认为这是有意义的,但我一直在别人告诉我,我应该只是吮吸它,抛弃主题动词协议和使用,,。 无论如何,对于在复数主题上运算的布尔型吸气剂,我该怎么办? 问题答案: 我不记

  • 问题内容: 我们有一些Hibernate getter方法,它们都用和标注。 如果没有相应的设置器,则会出现异常。为什么是这样? 在我们的例子中,我们派生了从getter返回的值(将其存储在数据库中),而setter没有任何功能目的。因此,我们只有一个空方法可以解决错误情况。 问题答案: 正如其他人提到的那样,如果您注释属性getter方法,则Hibernate在从数据库读取值时会使用setter