A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李金中 中级黑马   /  2014-2-17 00:01  /  1370 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题。。

评分

参与人数 1黑马币 +2 收起 理由
zzkang0206 + 2

查看全部评分

4 个回复

倒序浏览
通配符“?”代表不确定,泛型的意思,如果使用普通类型T定义,那么可以在方法中对T进行操作,T代表类型,若定义方法时以前是通配符“?”,换成“T”后,就不能对方法中原有的通配符类型“?”进行操作。建议使用“?”的方式。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
  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.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
程澄 发表于 2014-2-17 01:22
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法, ...

我的意思是 通配符?有什么好处,而不是它的用法。 如果通配符能做的,普通泛型都能做,那就没必要用通配符了吧,求解惑。
回复 使用道具 举报
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传进去也好使啊,那么通配符有什么用,求举例解惑

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马