黑马程序员技术交流社区
标题:
泛型通配符问题
[打印本页]
作者:
胡元
时间:
2012-4-12 20:48
标题:
泛型通配符问题
在泛型应用中如果我们自己也不确定要操作那种数据,可以用变量E来代替,
但是,我们又用<?>来表示,到底这两个又什么区别呀,还有,他们在什么情况下用
那个呀?
作者:
石好强
时间:
2012-4-12 21:10
?用在 泛型限定,如:
ArrayList<? extends E> //可以接收 E 及 E的子类--上限限定
ArrayList<? super E> //可以接收 E 及 E 的父类---下限限定
而E这不过是一个随即的表示,你可以写成A,T,任意来表示,就像你定义 int x = 0 ;这个x可以是y,z。。。你任意想定义的字母。用E比较多,是因为E是elements元素一词的首字母
作者:
刘基军
时间:
2012-4-12 22:43
<?>: 任何类型都匹配,
以API中的Collections类为例,它的方法: reverse(List<?> list) //这边就可以接受任意类型的List集合
<E>: 当你传进来一个具体的类型时,那么这个E就只代表这个类型了
以ArrayList类为例,
ArrayList<String> list = new ArrayList<String>(); //这么写后,就是指定了E此时就是String类型了
下面,我们再要向该集合添加元素时,那就应该写成:
list.add("abc"); //添加元素的方法: boolean add(E e)
作者:
黄长利
时间:
2012-4-12 22:50
其实 <> 就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到 <> 中即可。
E 也只是一种类型的表示而已,你可以自己定义任意一种符号。
?是一个通配符,也可以理解是一个占位符,表示的是未知的那个具体的引用类型
? extends E :可以接收 E 类型或者 E 的子类型。上限。
? super E :可以接收 E 类型或者 E 的父类型。下限。
作者:
贠(yun)靖
时间:
2012-4-12 22:53
用法楼上的都说了,我说一下区别
两个在用法上区别不是很大。
void method(List<?> list) it = list.iterator()
? a =it.next() 这个是不行的
void method(List<T> list) it = list.iterator() T a = it.next() 这个是可以的 传什么类型就是什么
作者:
马强
时间:
2012-4-12 23:01
1:? extends s: 可以接收E类型或者E的子类型。上限。
? super s: 可以接收E类型或者E的父类型。下限
这两个代表着相似的意思,上限代表s以及下边类所有都可以,下限代表s以及上边类都可以。
?也代表着任意类的匹配,有时候用?并不准确,需要用上述的限定接受子类或者父类。
2:传<e>代表着,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2