Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,深度不可变的对象如何包含不可变的类的实例?_Java - Fatal编程技术网

在java中,深度不可变的对象如何包含不可变的类的实例?

在java中,深度不可变的对象如何包含不可变的类的实例?,java,Java,我不太理解这句话,这句话是不是意味着在一个不可变的对象(类)中可以有一个可变的嵌套类?有什么例子吗?谢谢 是的,不可变类型可以由可变类型组成-只要: 它们确保在不克隆可变对象的情况下,不会在外部接受对它们的引用 它们从不改变对象本身(至少不以可见的方式) 它们从不向调用者返回对可变对象的引用 下面是一个例子: import java.util.Date; 公开期末班学员{ 私有最终字符串名; //注意:我不建议一般使用Date,但是 //这是一个很方便的例子。 私人最终日期注册时间戳; 公众

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

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

  • 它们确保在不克隆可变对象的情况下,不会在外部接受对它们的引用
  • 它们从不改变对象本身(至少不以可见的方式)
  • 它们从不向调用者返回对可变对象的引用
下面是一个例子:

import java.util.Date;
公开期末班学员{
私有最终字符串名;
//注意:我不建议一般使用Date,但是
//这是一个很方便的例子。
私人最终日期注册时间戳;
公众人物(字符串名称、日期注册时间戳){
this.name=名称;
this.registrationTimestamp=新日期(registrationTimestamp.getTime());
}
公共字符串getName(){
返回名称;
}
公共日期getRegistrationTimestamp(){
返回新日期(registrationTimestamp.getTime());
}
}
它之所以笨重,是因为它克隆了
Date
——这表明,在可能的情况下,最好从其他不可变类型中组合不可变类型(使用
java.time
类型而不是
java.util.Date
!)但是,即使在内部使用可变类型,也可以使类型不可变