黑马程序员技术交流社区
标题:
关于泛型限定的问题(已解决)
[打印本页]
作者:
韩新凯
时间:
2012-5-6 23:09
标题:
关于泛型限定的问题(已解决)
本帖最后由 韩新凯 于 2012-5-8 20:46 编辑
Student extends Person
<? extends E> : 可以接收E类型或者E的子类型。上限。
如果这里填入Student的话可不可以传入Person,为什么?
如果填入的是Person可不可以传入Student,为什么?
<? super E> : 可以接收E类型或者E的父类型。下限。
如果这里填入Student的话可不可以传入Person,为什么?
如果填入的是Person可不可以传入Student,为什么?
自己搞的差不多了,如果和我有一样疑问的朋友最好自己去试试。我就是自己最后试出来的。
作者:
胡生蒙
时间:
2012-5-6 23:19
<? extends E>:如果这里填入Student的话可不可以传入Person,这里是不能传入Person的,这里要求传入的是学生,而你传入的是一个人,传入的这个人可能是一个工人,这是不行的。如果填入的是Person可不可以传入Student,这是可以的,这里要求传入的是一个人,而你传入的是一个学生,学生也是一个人,这是可以的,这里也是多态,相当于Person p = new Student().
<? super E>这个的解释可以参照上面的解释
作者:
小鹿叙鹿
时间:
2012-5-6 23:21
可以
因为这样多的目的是为了让多个类可以用一个类中定义好的功能。
为什么呢?
因为这里应用了多态,只要你实现了父类中的方法功能,你就可以把子类作为参数传进去,但是在运行的时候是以子类为主
这实现了代码的复用,提高了代码的健壮性。
作者:
韩新凯
时间:
2012-5-8 11:55
胡生蒙 发表于 2012-5-6 23:19
class Comp implements Comparable<Person>{//<? super E>这里为什么可以传入学生?
@Override
public int compareTo(Person s) {
// TODO Auto-generated method stub
.......
return 0;
}
}
作者:
徐然
时间:
2012-5-8 13:15
class Comp implements Comparable<Person>{//<? super E>这里为什么可以传入学生?
如果学生是继承了Person的话,是不能传入学生的啊
因为<? super E>限定的是Person及其父类啊
@Override
public int compareTo(Person s) {
// TODO Auto-generated method stub
.......
return 0;
}
}
作者:
韩新凯
时间:
2012-5-8 16:01
本帖最后由 韩新凯 于 2012-5-8 16:09 编辑
徐然 发表于 2012-5-8 13:15
class Comp implements Comparable{//
毕老师说是可以的:
package com.generic;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class GenericDemo {
public static void main(String[] args) {
TreeSet<Student> ts = new TreeSet<Student>(new Comp());
ts.add(new Student("abc1"));
ts.add(new Student("abc2"));
ts.add(new Student("abc3"));
Iterator<Student> it = ts.iterator();
while (it.hasNext()) {
Student stu = it.next();
System.out.println(stu.getName());
}
}
}
class Person {
private String name;
public Person(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Student extends Person {
public Student(String name) {
super(name);
// TODO Auto-generated constructor stub
}
}
class Comp implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
return o1.getName().compareTo(o2.getName());
}
}
作者:
韩新凯
时间:
2012-5-8 16:11
非常感谢楼上几位朋友的回答,但是我还是不太明白。
作者:
韩新凯
时间:
2012-5-8 20:44
自己搞的差不多了,就这样吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2