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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



下面代码如何改成下限方法,我尝试修改了,编译出错。求解答



  1. import java.util.*;

  2. class Person
  3. {
  4.         private String name;

  5.         Person(String name)
  6.         {
  7.                 this.name = name;
  8.         }

  9.         public String getName()
  10.         {
  11.                 return name;
  12.         }
  13. }

  14. class Student extends Person
  15. {
  16.         Student(String name)
  17.         {
  18.                 super(name);
  19.         }
  20. }
  21. class TreeSetDemo9
  22. {
  23.         public static void main(String[] args)
  24.         {
  25.                 ArrayList<Person> al = new ArrayList<Person>();

  26.                 al.add(new Person("java01"));
  27.                 al.add(new Person("java02"));
  28.                 al.add(new Person("java03"));

  29.                 printColl(al);

  30.                 System.out.println();

  31.                 ArrayList<Student> al1 = new ArrayList<Student>();

  32.                 al1.add(new Student("abc01"));
  33.                 al1.add(new Student("abc02"));
  34.                 al1.add(new Student("abc03"));

  35.                 printColl(al1);
  36.         }

  37.         public static void printColl(ArrayList<? extends Person> al)
  38.         {
  39.                 Iterator<? extends Person> it = al.iterator();

  40.                 while(it.hasNext())
  41.                 {
  42.                         System.out.println(it.next().getName());
  43.                 }
  44.         }
  45. }
复制代码




5 个回复

正序浏览
长知识了~6666,
回复 使用道具 举报
藤椅 兄弟说的很好。
System.out.println(it.next().getName());这句没打出结果,显然是没有识别到it.next()就是student,
这是因为泛型没起作用。泛型为什么没起作用?那么,可以追问:一个类只有一个子类吗?不是,那泛型当然不会起作用。

总结:
泛型的限定是用在设计类的时候,
而应用时应该明确化。
回复 使用道具 举报
tds13821562936 发表于 2015-3-3 15:47
泛型限定
一般向集合添加元素的时候,既能添加本类对象,又能添加子类对象,这时候用上限
从集合中取出元素 ...

谢谢你。你回答的很详细,我明白了
回复 使用道具 举报
泛型限定
一般向集合添加元素的时候,既能添加本类对象,又能添加子类对象,这时候用上限
从集合中取出元素的时候,既能当成本类对象接受,又能当父类型接受,这时候用下限

这样想象一下,
如果迭代器定义的泛型上限,比如有一个子类,复写了父类的getName()方法,那么迭代器怎么分辨取出的元素种类对应的方法呢?
所以传输的类型默认就是Object,Object没有getName(),只有toString()
回复 使用道具 举报 1 0
不能重新编辑帖子,回复自己下。
1,刚研究出,代码稍作修改,覆盖toString,可打印结果。
2,为什么我调用getName(),却得不出结果??
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马