使用<? extend E>是功能正常,但是使用<? super E>时却出现问题,提示如下:
难道是<? super Student>将类型转成了Object ,Object中没有getName()方法导致报错的?那泛型的下限正确使用方式是什么呢?
对于泛型下限也没怎么使用过,希望熟悉的同学帮忙解答一下。
- import java.util.*;
- class GenericDemo7
- {
- public static void main(String[] args)
- {
- TreeSet<Student> ts = new TreeSet<Student>(new Comp());
- ts.add(new Student("Student.szhangsan"));
- ts.add(new Student("Student.slisi"));
- ts.add(new Student("Student.swangwu"));
- //ts.add(new Person("Person.zhangsan"));
- //ts.add(new Person("Person.lisi"));
- //ts.add(new Person("Person.wangwu"));
- printColl(ts);
- }
- public static void printColl(TreeSet<? super Student> ts)
- {
- Iterator<? super Student> it = ts.iterator();
- while(it.hasNext())
- {
- System.out.println(it.next().getName());
- }
-
- }
- }
- class Comp implements Comparator<Person>
- {
- public int compare(Person p1,Person p2)
- {
- return p1.getName().compareTo(p2.getName());
- }
- }
- class Person
- {
- private String name;
- public Person(String name)
- {
- this.name = name;
- }
- public String getName()
- {
- return name;
- }
- }
- class Student extends Person
- {
- public Student(String name)
- {
- super(name);
- }
- }
复制代码
|
|