缺少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