黑马程序员技术交流社区
标题:
请教关于泛型的问题
[打印本页]
作者:
H07000223
时间:
2012-3-11 11:02
标题:
请教关于泛型的问题
泛型中Object与通配符?的区别
作者:
冯旭君
时间:
2012-3-11 11:22
本帖最后由 冯旭君 于 2012-3-11 11:32 编辑
泛型中Object的即表示所有的类型,而通配符?并不一定是什么类(当然是Object类型,因为java的单根继承,这里只是说明一个相对比Object类具体的类型),就是用通配符来充当一个类型填充上此位置来保证代码的完整性和可读性。
//这是从AbstractList类中截取的一段代码
例如:
public boolean addAll(Collection<? extends E> c) {
return addAll(size, c);
}
这里的?号就是一种类型,是E的子类。用Object显然是不对的。由于java中的多态型E的子类很多又想让E的子类都能传递进去,但又不想其他类传进去,必须要用一个符号表示,所以通配符就出现了。
作者:
編程浪子
时间:
2012-3-11 11:30
比如public void say(Person<Object> per){}
那么只能接收Person<Object> per=new Person<Object>()这种类型Person,
泛型中没有继承这种概念,所以不能接收Person<String > per=new Person<String>(),如果要接收任意的参数类型,就应该用
public void say(Person<?>per){}
?是通配符,代表任意.
作者:
baypm_jy
时间:
2012-3-11 13:11
本帖最后由 baypm_jy 于 2012-3-11 13:19 编辑
首先Object类是所有类的父类,它在java.lang.Object包下,可参照官方API文档查阅
如:假设有Person类
List<Person> person=new ArrayList<Person>(); 这里表示有这么样的一个集合,它只接收Person这种类型的数据
如果想换成其它的也可
List<?> list=new ArrayList<Object>(); 代表这么样的一个集合,它是接收任意数据类型的一个集合,它可以是Object,也可是String,也可以是Map对象
如:List<Map<String,String>> list=new ArrayList<Map<String,String>>(); 等,在Android的适配器里面就有用到。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2