par*_*rkr 32 java immutability
Java中不可变对象的优点似乎很清楚:
您可以通过使用私有final字段和构造函数注入来支持不变性.
但是,在Java中支持不可变对象的缺点是什么?
即
是否有可能设计一个主要使用不可变对象的大规模系统(深层对象图)?
dfa*_*dfa 19
但是,在Java中支持不可变对象的缺点是什么?与ORM或Web演示工具不兼容?
基于反射的框架由于不可变对象而变得复杂,因为它们需要构造函数注入:
实施复杂性?
创建不可变对象仍然是一项无聊的任务; 编译器应该处理实现细节,就像在groovy中一样
是否有可能设计一个主要使用不可变对象的大规模系统(深层对象图)?
肯定是的; 不可变对象为其他对象构建了很好的构建块(它们支持组合),因为当你可以依赖它的不可变组件时,维护复杂对象的不变量要容易得多.对我来说唯一真正的缺点是创建了许多临时对象(例如,String concat过去是一个问题).
And*_*eiM 15
通过不变性,只要您需要修改数据,就需要创建一个新对象.这可能很昂贵.
想象一下,需要在消耗几兆内存的对象中修改一个位:你需要实例化一个全新的对象,分配内存等.如果你需要多次这样做,可变性变得非常有吸引力.