我将以下代码中的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