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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天方地圆 中级黑马   /  2014-3-4 17:23  /  810 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;

  2. class  GenericDemo6
  3. {
  4.         public static void main(String[] args)
  5.         {

  6.                 ArrayList<Person> ps = new ArrayList<Person>();

  7.                 ps.add(new Person("abc1"));
  8.                 ps.add(new Person("abc2"));
  9.                 ps.add(new Person("abc3"));
  10.                 //printColl(ps);
  11.                
  12.                 ArrayList<Student> stu = new ArrayList<Student>();

  13.                 stu.add(new Student("abc---1"));
  14.                 stu.add(new Student("abc---2"));
  15.                 stu.add(new Student("abc---3"));
  16.                
  17.                 printColl(stu);//ArrayList<Person> ps = new ArrayList<Student>();error
  18.        
  19.         }
  20.         public static void printColl(ArrayList<?> ps)
  21.         {
  22.                 Iterator<?> it = ps.iterator();
  23.                 while (it.hasNext())
  24.                 {
  25.                         System.out.println(it.next().getName());
  26.                 }
  27.         }

  28. }
  29. class Person
  30. {
  31.         private String name;
  32.         Person(String name)
  33.         {
  34.                 this.name = name;
  35.         }
  36.         public String getName()
  37.         {
  38.                 return name;
  39.         }
  40. }
  41. class Student extends Person
  42. {
  43.         Student(String name)
  44.         {
  45.                 super(name);
  46.         }
  47. }
复制代码

运行报错 ,是真么回事?

飞信截图20140304171844.jpg (32 KB, 下载次数: 9)

飞信截图20140304171844.jpg

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 Maple 于 2014-3-4 17:36 编辑

System.out.println(((Person) it.next()).getName());
在 it.next()加个强转就可以了
因为你在定义方法的泛型里没有定义,可是只有Person和它的子类对象才可以调用getName()方法,所以在这里强转成Penson类型是一个解决方法。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
你的迭代器定义的类型时<?>也就是只要是Object的子类都可以,那么类型不明确了,只有你知道获取的具体类型是什么,所以要强转一下,转成Person类就可以使用getName方法了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马