今天写集合遇到一个问题 求各位大神看看 代码如下
List<? super Person> l = new ArrayList<Person>();
l.add(new Person("张三", 20));
l.add(new Person("李四", 30));
l.add(new Person("王五", 25));
l.add(new Person("赵六", 24));上面的代码能执行没问题
List<? extends Person> al = new ArrayList<Person>();
al.add(new Person("张三", 20));
al.add(new Person("李四", 30));
al.add(new Person("王五", 25));
al.add(new Person("赵六", 24));
这样写第一句没问题,但不能调用方法 这是为什么
class Person {
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
这是Peroson类
List<? super Person> l = new ArrayList<Person>();
l.add(new Person("张三", 20));
l.add(new Person("李四", 30));
l.add(new Person("王五", 25));
l.add(new Person("赵六", 24));上面的代码能执行没问题
List<? extends Person> al = new ArrayList<Person>();
al.add(new Person("张三", 20));
al.add(new Person("李四", 30));
al.add(new Person("王五", 25));
al.add(new Person("赵六", 24));
这样写第一句没问题,但不能调用方法 这是为什么
class Person {
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
这是Peroson类
解决方案 »
- 面试题选择,求解释,,,,谢了
- 关于java快速排序的问题,代码如下,看不出那里出了错误
- 一个字符串题目!
- java支持双核CPU吗?
- 北京到那里学java好
- 请问大家 程序员可不可以自己编软件卖
- 关于serlet中调用jar中的类的问题?
- 请教各位一个有关OutputStreamWriter类的问题,谢谢了!
- JNIEXPORT void JNICALL Java_jnitest_HelloWorld_DisplayHelloWorld(); 为何声明出错
- java 类锁 如何显式释放(wait释放的是对象锁)
- 希望有经历过的朋友帮我看下这个问题
- 关于hibernate查询之后对象转换的问题!。。
为什么向下兼容就会报错?问题是这个
List<? extends Person> al 的意思是“Person,或者 Person 的某种子类型的List”,就是说,满足条件的类型是“Person,或者 Person 的某种子类型”,就是说,不确定是哪种具体的类型满足条件,就是说,给出任何一种具体的类型,都不确定其是否满足条件,就是说,实际操作的时候等同于“任何类型都不满足条件”。
所以,你不能往里添加任何元素,但是你可以从中取出元素或遍历元素,
对于取出的元素,你虽然不知道它具体是哪种类型,但是你知道它一定是Person的子类型,
所以,可以用Person类型的变量来接收。
因为这种说: Person,或者某种 Person 的父类型的 List满足条件的类型,是类型 x , x 的具体类型未知,也许是Person,也许是Person的某种父类型但是不管是哪种, x 满足条件的同时, x 的所有子类型也满足条件不管 x 是哪种类型, 已知 Person 一定是 x 的子类型或 x 本身,换句话说,虽然 x 未知,但是已知 Person 一定满足类型检查的条件。