java – 如何创建具有可变对象作为引用的不可变类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何创建具有可变对象作为引用的不可变类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1535字,纯文字阅读大概需要3分钟。
内容图文
![java – 如何创建具有可变对象作为引用的不可变类](/upload/InfoBanner/zyjiaocheng/795/95f8e9e4ee694f74a122e3b6e0e75fa2.jpg)
我问的问题是“如何在java中创建不可变对象”.
所以我有一个来自第三方的Address类,它不继承任何Cloneable接口及其可变类.看起来像这样
public class Address {
private String city;
private String address;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
现在我有另一个名为Person的不可变类,它实现了Cloneable接口,并且还覆盖了clone方法.Class看起来像这样
public class Person implements Cloneable {
private String name;
private Address address;
public Person() {
}
public Person(String name, Address address) {
this.name = name;
this.address = address;
//this.address = (Address) address.clone();
}
public String getName() {
return name;
}
@Override
protected Object clone() throws CloneNotSupportedException {
Person person = (Person) super.clone();
return super.clone();
}
public Address getAddress() {
return address;
}
@Override
public String toString() {
return "name:" + name + ", address" + address.getAddress() + ", city="
+ address.getCity();
}
}
现在我的问题是,我当然可以克隆Person类对象但是如何克隆类实例.我还阅读了一些关于浅层克隆和深度克隆的文章.但我无法理解使用三十方API可以做多深的克隆.如果我理解克隆的错误,请纠正我.
解决方法:
我认为你理解得很好:克隆是一种糟糕的机制,实际上有一个完整的错误列表(请查看Effective Java).与您的情况特别相关,您无法使用最终字段深度克隆对象.
而是选择用于复制对象的自定义机制,例如复制构造函数或专用方法.
内存序列化 – 反序列化循环也有一个技巧,但我不会真的推荐它,除非你的列表中的性能和效率不高.
内容总结
以上是互联网集市为您收集整理的java – 如何创建具有可变对象作为引用的不可变类全部内容,希望文章能够帮你解决java – 如何创建具有可变对象作为引用的不可变类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。