在java中,一个深度不可变的对象怎么可能包含不可变的类的实例



我不太理解这句话,这句话是不是意味着在一个不可变的对象(类(中可以有一个可变的嵌套类?有什么例子吗?谢谢

是的,不可变类型可以由可变类型组成,只要:

  • 它们确保在不克隆可变对象的情况下不接受外部对可变对象的引用
  • 它们从不改变对象本身(至少不会以可见的方式(
  • 它们从不向调用方返回对可变对象的引用

这里有一个例子:

import java.util.Date;
public final class Person {
private final String name;
// Note: I don't recommend using Date generally, but
// it's a convenient type to use as an example.
private final Date registrationTimestamp;
public Person(String name, Date registrationTimestamp) {
this.name = name;
this.registrationTimestamp = new Date(registrationTimestamp.getTime());
}
public String getName() {
return name;
}
public Date getRegistrationTimestamp() {
return new Date(registrationTimestamp.getTime());
}
}

它之所以笨拙,是因为Date的克隆——这表明在可能的情况下,从其他不可变类型中组合不可变类型是更好的(使用java.time类型而不是java.util.Date!(,但即使在内部使用可变类型,也有可能使类型不可变。

最新更新