黑马程序员技术交流社区

标题: 关于泛型限定的问题 [打印本页]

作者: Ezreal    时间: 2014-8-7 17:47
标题: 关于泛型限定的问题
  1. public static void printColl(ArrayList<? extends Person1> al)
  2.         {
  3.                 Iterator<? extends Person1> it = al.iterator();
  4.                 while(it.hasNext())
  5.                         System.out.println(it.next().getName());
  6.                        
  7.         }
复制代码
这段代码Iterator处有下面的错误提示,这是什么意思啊,帮忙看下




作者: Ezreal    时间: 2014-8-7 18:14
秒沉啊,大神们在哪
作者: fantacyleo    时间: 2014-8-7 19:37
Iterator<? extends Person1> it = al.iterator();这种写法不对呗。改成 Iterator it = al.iterator();
作者: Ezreal    时间: 2014-8-7 23:33
fantacyleo 发表于 2014-8-7 19:37
Iterator

不对啊  操作的数据类型继承了Peron1啊
作者: fantacyleo    时间: 2014-8-7 23:35
Ezreal 发表于 2014-8-7 23:33
不对啊  操作的数据类型继承了Peron1啊

怎么不对了?编译、运行出错了?
作者: Ezreal    时间: 2014-8-7 23:37
fantacyleo 发表于 2014-8-7 23:35
怎么不对了?编译、运行出错了?

因为这个方法传入的数据类型是ArrayList<? extends Person1> al  啊,那样写的话编译不行吧
作者: fantacyleo    时间: 2014-8-7 23:45
Ezreal 发表于 2014-8-7 23:37
因为这个方法传入的数据类型是ArrayList

不要想当然猜测,亲自运行一下。高新视频讲过的,非泛型引用变量可以指向泛型对象
作者: Ezreal    时间: 2014-8-7 23:49
我在Eclipse上试了,还是提示一样的错误。不过我还没看到高新视频。。
作者: fantacyleo    时间: 2014-8-8 00:01
Ezreal 发表于 2014-8-7 23:49
我在Eclipse上试了,还是提示一样的错误。不过我还没看到高新视频。。

两种写法均编译通过并正常运行
  1. public static void printColl(ArrayList<? extends Person1> al)
  2. { Iterator it = al.iterator();
  3. while(it.hasNext())
  4.      ((Person1)it.next()).getName(); }
复制代码
  1. public static void printColl(ArrayList<? extends Person1> al)
  2.     {
  3.             Iterator<? extends Person1> it = al.iterator();
  4.             while(it.hasNext())
  5.                     it.next().getName();
  6.     }
复制代码



作者: Ezreal    时间: 2014-8-8 00:08
fantacyleo 发表于 2014-8-8 00:01
两种写法均编译通过并正常运行

为什么我的不行,你用的是啥编译器
作者: fantacyleo    时间: 2014-8-8 00:13
Ezreal 发表于 2014-8-8 00:08
为什么我的不行,你用的是啥编译器

eclipse自带的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2