我有一个模型类如下:
package MyPackage.Models;
public class MyModel {
private int id;
public MyModel() {
}
public MyModel(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
在这个类中,我创建了两个对象,如下所示并对其进行赋值。我希望当我改变b的值时,a的值不会改变。当我改变 b 的值时,a 的值也会改变。
MyModel a = new MyModel();
MyModel b = new MyModel();
a.setId(1);
Log.i("nadertag", "a=" + a.getId());
b = a;
Log.i("nadertag", "b=" + b.getId());
b.setId(2);
Log.i("nadertag", "a=" + a.getId() + "," + "b=" + b.getId());
需要注意的是,这是一个简单的模型类,主程序有很多字段,我无法将它们一一放在b变量中。
请向我展示示例解决方案。
发生这种情况是因为当您编写
b = a
时,两个变量都指向同一个对象,最初仅分配给 a
。发生这种情况是因为您仅将对象的引用传递给 b
。
如果要将
a
中对象的所有属性复制到b
中对象,并且不想单独设置它们,则必须对对象进行“深复制”或“克隆”。查看这个问题以获取更多信息。
只需按照以下步骤操作:
public class MyModel implements Cloneable{
private int id;
public MyModel() {
}
public MyModel(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
无论您想要获取另一个对象,只需执行克隆即可。例如:
MyModel a = new MyModel();
MyModel b = (MyModel) a.clone();