如何在java中创建包含其他可变对象列表的不可变对象?

如何在java中创建包含其他可变对象列表的不可变对象?,java,arraylist,collections,immutability,cloneable,Java,Arraylist,Collections,Immutability,Cloneable,假设我有Employee类,其中有一个类似于成员的地址列表。一种方法是创建like list=Collections.unmodifiableList(list),另一种方法是进行防御性复制或深度克隆。 但第一种方法只是包装可变实例,地址对象仍然是可变的。我们不能接触地址类,因为它是第三方类。若我们正在进行深度克隆,比如说,若列表包含数百万个条目,那个么在进行克隆的过程中,会有性能损失。 还有其他方法吗?您可以围绕地址创建自己的不可变包装器类。这可能会有帮助-@kenobiwan这与在构造函数中

假设我有Employee类,其中有一个类似于成员的地址列表。一种方法是创建like list=Collections.unmodifiableList(list),另一种方法是进行防御性复制或深度克隆。 但第一种方法只是包装可变实例,地址对象仍然是可变的。我们不能接触地址类,因为它是第三方类。若我们正在进行深度克隆,比如说,若列表包含数百万个条目,那个么在进行克隆的过程中,会有性能损失。
还有其他方法吗?

您可以围绕
地址创建自己的不可变包装器类。这可能会有帮助-@kenobiwan这与在构造函数中进行深度克隆非常相似。克隆需要付出性能成本,我正在寻找其他解决方法。@vlumi谢谢。您有相同的代码片段吗?不可变包装器只是一个类,它只包含
Address
字段的getter,并为层次结构中的任何其他可变类创建一个类似的不可变包装器。如果您需要将原始的可变类型对象传递到某个地方,这种方法将不起作用——也许包装器也可以有一种方法来获取原始类型的深度克隆。您可以围绕
地址
创建自己的不可变包装器类。这可能有助于-@kenobiwan,这与在构造函数中进行深度克隆非常类似。克隆需要付出性能成本,我正在寻找其他解决方法。@vlumi谢谢。您有相同的代码片段吗?不可变包装器只是一个类,它只包含
Address
字段的getter,并为层次结构中的任何其他可变类创建一个类似的不可变包装器。如果您需要将原始的可变类型对象传递到某个地方,那么这种方法将不起作用——也许包装器也可以有一种方法来获得原始类型的深层克隆。