代码:
public class Pair<T> {
private T t1;
private T t2;
public T getT1() {
return t1;
}
public void setT1(T t1) {
this.t1 = t1;
}
public T getT2() {
return t2;
}
public void setT2(T t2) {
this.t2 = t2;
}
}
public class User {
private String name;
private String sex;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
public class Twins extends Pair<User> {
@Override
public void setT1(User t1) {
if (t1 != null) {
super.setT1(t1);
}
}
@Override
public void setT2(User t2) {
if (t2 != null) {
super.setT2(t2);
}
}
}
问题描述:虚拟机会将 Pair
进行类型擦除,擦出后类型变量将替换为 Object,那么 Twins
类重写的方法 void setT1(User t1)
及 void setT2(User t2)
中参数会擦出为 Object
吗?为什么?
Twins的方法参数User类型不会被擦除, 因为已经做了类型绑定.
如果执行
new Twins().setT1(new Object())
会报如下错:
官方文档原文是这么写的:
参考:
https://docs.oracle.com/javas...
@潘金莲的答案更确切些