A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© caobin 中级黑马   /  2014-12-5 20:16  /  1416 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

使用<? extend E>是功能正常,但是使用<? super E>时却出现问题,提示如下:
难道是<? super Student>将类型转成了Object ,Object中没有getName()方法导致报错的?那泛型的下限正确使用方式是什么呢?
对于泛型下限也没怎么使用过,希望熟悉的同学帮忙解答一下。

  1. import java.util.*;
  2. class GenericDemo7
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 TreeSet<Student> ts = new TreeSet<Student>(new Comp());
  7.                 ts.add(new Student("Student.szhangsan"));
  8.                 ts.add(new Student("Student.slisi"));
  9.                 ts.add(new Student("Student.swangwu"));
  10.                 //ts.add(new Person("Person.zhangsan"));
  11.                 //ts.add(new Person("Person.lisi"));
  12.                 //ts.add(new Person("Person.wangwu"));
  13.                 printColl(ts);
  14.         }
  15.         public static void printColl(TreeSet<? super Student> ts)
  16.         {
  17.                 Iterator<? super Student> it = ts.iterator();
  18.                 while(it.hasNext())
  19.                 {
  20.                         System.out.println(it.next().getName());
  21.                 }
  22.                
  23.         }

  24. }
  25. class Comp implements Comparator<Person>
  26. {
  27.         public int compare(Person p1,Person p2)
  28.         {
  29.                 return p1.getName().compareTo(p2.getName());
  30.         }
  31. }
  32. class Person
  33. {
  34.         private String name;
  35.         public Person(String name)
  36.         {
  37.                 this.name = name;
  38.         }
  39.         public String getName()
  40.         {
  41.                 return name;
  42.         }        
  43. }
  44. class Student extends Person
  45. {
  46.         public Student(String name)
  47.         {
  48.                 super(name);
  49.         }        
  50. }
复制代码




3 个回复

倒序浏览
本帖最后由 cs8630323 于 2014-12-6 07:47 编辑

it.next()返回值类型为student和它的父类,不能确定这个类型一定有getName方法
回复 使用道具 举报
Student的父类不一定具有Student的方法。
但是Student的子类一定具有Student的方法。
回复 使用道具 举报
你没搞清楚下限的用法,给你个例子看看:TreeSet的那个需要传个Comparator的构造方法。
不要为了用而用,要到该用的时候再用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马