黑马程序员技术交流社区
标题:
关于泛型限定的问题?求教。
[打印本页]
作者:
天方地圆
时间:
2014-3-4 17:23
标题:
关于泛型限定的问题?求教。
import java.util.*;
class GenericDemo6
{
public static void main(String[] args)
{
ArrayList<Person> ps = new ArrayList<Person>();
ps.add(new Person("abc1"));
ps.add(new Person("abc2"));
ps.add(new Person("abc3"));
//printColl(ps);
ArrayList<Student> stu = new ArrayList<Student>();
stu.add(new Student("abc---1"));
stu.add(new Student("abc---2"));
stu.add(new Student("abc---3"));
printColl(stu);//ArrayList<Person> ps = new ArrayList<Student>();error
}
public static void printColl(ArrayList<?> ps)
{
Iterator<?> it = ps.iterator();
while (it.hasNext())
{
System.out.println(it.next().getName());
}
}
}
class Person
{
private String name;
Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
class Student extends Person
{
Student(String name)
{
super(name);
}
}
复制代码
运行报错 ,是真么回事?
飞信截图20140304171844.jpg
(32 KB, 下载次数: 18)
下载附件
2014-3-4 17:22 上传
作者:
Maple
时间:
2014-3-4 17:31
本帖最后由 Maple 于 2014-3-4 17:36 编辑
System.out.println(((Person) it.next()).getName());
在 it.next()加个强转就可以了
因为你在定义方法的泛型里没有定义,可是只有Person和它的子类对象才可以调用getName()方法,所以在这里强转成Penson类型是一个解决方法。
作者:
薛旻
时间:
2014-3-4 18:41
你的迭代器定义的类型时<?>也就是只要是Object的子类都可以,那么类型不明确了,只有你知道获取的具体类型是什么,所以要强转一下,转成Person类就可以使用getName方法了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2