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

Java中不可变对象的缺点?

汪博艺
2023-03-14
问题内容

Java中不变对象的优点显而易见:

  • 一致状态
  • 自动线程安全
  • 简单

您可以通过使用私有final字段和构造函数注入来支持不变性。

但是,在Java中偏爱不可变对象有哪些弊端?

  • 与ORM或Web演示工具不兼容?
  • 不灵活的设计?
  • 实施的复杂性?

是否可以设计一个主要使用不可变对象的大规模系统(深层对象图)?


问题答案:

但是,在Java中偏爱不可变对象有哪些弊端?与ORM或Web演示工具不兼容?

基于反射的框架由于不可变对象而变得复杂,因为它们 需要 构造函数注入:

  • Java中没有默认参数,这迫使我们始终提供所有必要的依赖项
  • 构造函数的覆盖可能很杂乱
  • 构造函数自变量名称通常无法通过反射获得,这迫使我们依赖自变量顺序来进行依赖关系解析

实施的复杂性?

创建不可变的对象仍然很无聊。像groovy一样,编译器应注意实现细节

是否可以设计一个主要使用不可变对象的大规模系统(深层对象图)?

肯定是的;不可变对象为其他对象(它们倾向于组成)提供了很好的构建块,因为当您可以依靠复杂对象的不可变组件时,维护复杂对象的不变性要容易得多。对我而言,唯一真正的缺点是创建许多临时对象(例如,String
concat在过去是一个问题
)。



 类似资料:
  • 我知道不可变对象比可变对象有几个优点,比如它们比可变对象更容易推理,它们没有随时间变化的复杂状态空间,我们可以自由地传递它们,它们生成安全的哈希表键等等。所以我的问题是不可变对象的缺点是什么??

  • 我的目标是让Java对象不可变。我有一个班级< code >学生。为了实现不变性,我用以下方式对它进行了编码: 我的问题是,实现班级不变性的最佳方法是什么?

  • 问题内容: 我正在努力使可变对象与不可变对象有关。使用可变对象会带来很多负面影响(例如,从方法中返回字符串数组),但是我很难理解它的负面影响。使用可变对象的最佳实践是什么?您是否应尽可能避免使用它们? 问题答案: 好吧,这有几个方面。 没有参考身份的可变对象会在奇数时间导致错误。例如,考虑使用基于值的方法的 : 当实例用作键时,实例在映射中“丢失”,因为实例和相等性基于可变值。这些值在映射之外更改

  • 本文向大家介绍浅谈Python中的可变对象和不可变对象,包括了浅谈Python中的可变对象和不可变对象的使用技巧和注意事项,需要的朋友参考一下 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。 可变对象,该对象所指向的内存中的值可以被改变。变量(准确

  • 问题内容: String abc[]={“abc”}; String def[]={}; 通过更改“ def”对象,我的abc对象也被更改。在String []数组旁边有这个特性还有什么其他的Java对象有类似的特性?能解释更多吗?为了防止在更改def时更改abc,我必须执行def = abc.clone();。 问题答案: 您将对象的可变性/不可变性与引用值的复制混淆了。 在这些图中,是参考变量

  • 问题内容: 在我的代码中,我正在创建一个对象集合,各个线程将以一种仅在对象是不可变的情况下才安全的方式访问这些对象。当试图将一个新对象插入到我的集合中时,我想测试一下它是否是不可变的(如果不是,我将抛出一个异常)。 我可以做的一件事是检查一些众所周知的不可变类型: 这实际上使我省了90%的路,但是有时我的用户会想要创建自己的简单不可变类型: 是否有某种方式(也许使用反射)可以可靠地检测到类是否不可