我将以下代码中的Model2实例上转换为Object类,然后在Model1类的测试方法中向下转换回类-Model2。但是thenUov在向下转换后其属性值显示为null。实例在Upcasting-then-Downcasting之后松开其状态时,是否期望这样做?能否请您分享一些细节。另外,是否有一种方法可以在上传后保留实例的状态?

public class Demo{

    public static void main(String[] args) {
        Model1 m1 = new Model1();
        m1.setAttr1(10);

        Model2 m2 = new Model2();
        m2.setAttr2(10);

        m1.test(m2);
    }

}


class Model1 {

    private Integer attr1;

    public Integer getAttr1() {
        return attr1;
    }

    public void setAttr1(Integer attr1) {
        this.attr1 = attr1;
    }

    public void test(Object o) {
        Model2 m = (Model2) o;
        System.out.println(m.getAttr2());
    }

}

class Model2 {

    private Integer attr2;

    public Integer getAttr2() {
        return attr2;
    }

    public void setAttr2(Integer attr1) {
        this.attr2 = attr2;
    }
}

最佳答案

不,您在投射时不会丢失数据-对象就是它所存在的对象。

您由于Model2中的错字而得到null

public void setAttr2(Integer attr1) {
        this.attr2 = attr2;
}


您将attr2设置为其自身,函数定义应为(Interger attr2)

更改将输出10

09-26 15:08