黑马程序员技术交流社区

标题: 通配符<?>与普通泛型<T>的区别是什么 [打印本页]

作者: 李金中    时间: 2014-2-17 00:01
标题: 通配符<?>与普通泛型<T>的区别是什么
如题。。
作者: 徐青松    时间: 2014-2-17 00:20
通配符“?”代表不确定,泛型的意思,如果使用普通类型T定义,那么可以在方法中对T进行操作,T代表类型,若定义方法时以前是通配符“?”,换成“T”后,就不能对方法中原有的通配符类型“?”进行操作。建议使用“?”的方式。
作者: 程澄    时间: 2014-2-17 01:22
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
  1. public static void printCollection(Collection<?> cols) {
  2.                 for(Object obj:cols) {
  3.                         System.out.println(obj);
  4.                 }
  5.                 //cols.add("string");//错误,因为它不知自己未来匹配就一定是String
  6.                 cols.size();//没错,此方法与类型参数没有关系
  7.                 cols = new HashSet<Date>();
  8.         }
复制代码

使用泛型T:将类型转换成T就行
  1. public static <T> void printCollection(Collection<T> cols) {
  2.                 for(Object obj:cols) {
  3.                         System.out.println(obj);
  4.                 }
  5.                 cols.add((T) "string")
  6.                 cols.size()
  7.                 cols = (Collection<T>) new HashSet<Date>();
  8.         }
复制代码

作者: 李金中    时间: 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