编程语言
首页 > 编程语言> > 缺少Java中的不可变对象?

缺少Java中的不可变对象?

作者:互联网

Java中不可变对象的优点似乎很清楚:

>一致的状态
>自动螺纹安全
>简单

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

但是,在Java中支持不可变对象的缺点是什么?

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

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

解决方法:

But, what are the downsides to
favouring immutable objects in Java?
incompatibility with ORM or web
presentation tools?

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

> Java中没有默认参数,这迫使我们始终提供所有必需的依赖项
>构造函数重写可能会很混乱
>构造函数参数名称通常不能通过反射获得,这迫使我们依赖于参数顺序来进行依赖项解析

Implementation complexities?

创建不可变对象仍然是一项无聊的任务;编译器应该处理实现细节,如groovy所示

Is it possible to design a large-scale system (deep object graph) that predominately uses immutable objects?

肯定是的;不可变对象为其他对象构建了很好的构建块(它们支持组合),因为当你可以依赖它的不可变组件时,维护复杂对象的不变量要容易得多.对我来说唯一真正的缺点是创建了许多临时对象(例如String concat was a problem in the past).

标签:java,immutability
来源: https://codeday.me/bug/20190930/1834840.html