黑马程序员技术交流社区
标题:
通配符<?>与普通泛型<T>的区别是什么
[打印本页]
作者:
李金中
时间:
2014-2-17 00:01
标题:
通配符<?>与普通泛型<T>的区别是什么
如题。。
作者:
徐青松
时间:
2014-2-17 00:20
通配符“?”代表不确定,泛型的意思,如果使用普通类型T定义,那么可以在方法中对T进行操作,T代表类型,若定义方法时以前是通配符“?”,换成“T”后,就不能对方法中原有的通配符类型“?”进行操作。建议使用“?”的方式。
作者:
程澄
时间:
2014-2-17 01:22
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
public static void printCollection(Collection<?> cols) {
for(Object obj:cols) {
System.out.println(obj);
}
//cols.add("string");//错误,因为它不知自己未来匹配就一定是String
cols.size();//没错,此方法与类型参数没有关系
cols = new HashSet<Date>();
}
复制代码
使用泛型T:将类型转换成T就行
public static <T> void printCollection(Collection<T> cols) {
for(Object obj:cols) {
System.out.println(obj);
}
cols.add((T) "string")
cols.size()
cols = (Collection<T>) new HashSet<Date>();
}
复制代码
作者:
李金中
时间:
2014-2-17 13:05
程澄 发表于 2014-2-17 01:22
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法, ...
我的意思是 通配符?有什么好处,而不是它的用法。 如果通配符能做的,普通泛型都能做,那就没必要用通配符了吧,求解惑。
作者:
李金中
时间:
2014-2-17 13:11
import java.util.ArrayList;
import java.util.Collection;
public class Test11 {
public static void main(String[] args)
{
ArrayList<Integer> arrL = new ArrayList();
arrL.add(1);
print(arrL);
}
public static <T> void print(Collection<T> col)
{
for(T temp : col)
{
System.out.println(temp);
}
}
}
把指定参数类型的Collection传进去也好使啊,那么通配符有什么用,求举例解惑
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2