如何更改模型类的值?

问题描述 投票:0回答:2

我有一个模型类如下:

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变量中。

请向我展示示例解决方案。

class model variable-assignment
2个回答
0
投票

发生这种情况是因为当您编写

b = a
时,两个变量都指向同一个对象,最初仅分配给
a
。发生这种情况是因为您仅将对象的引用传递给
b

如果要将

a
中对象的所有属性复制到
b
中对象,并且不想单独设置它们,则必须对对象进行“深复制”或“克隆”。查看这个问题以获取更多信息。


0
投票

只需按照以下步骤操作:

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(); 
© www.soinside.com 2019 - 2024. All rights reserved.