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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 房建斌 中级黑马   /  2014-3-15 22:43  /  967 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 房建斌 于 2014-3-15 22:46 编辑

使用泛型通配符时,如下书写,为什么会报错:
  1. HashSet<?> set = new HashSet<?>();
复制代码

Cannot instantiate the type HashSet<?>。
请高手解答。
new HashSet()必须是一个具体的类型,并不能是一个通配符。

评分

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

查看全部评分

5 个回复

正序浏览
我在想,如果能用上通配符,那这个泛型就不如写Object类型不是更好
例如Set<Object> sets=new HashSet<Object>()
所以,通配符这里是不能用的
HashSet<T> hs=new HashSet<T>() 这个T就相当于是通配符的概念
但是,楼主,泛型的出错就是为了统一数据格式,在效率上就省去了拆箱装箱.效率上去了

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
我见到的泛型在hashset<>貌似都是一个指定的类型,直接这样hashset<通配符>,貌似不可以
回复 使用道具 举报
房建斌 发表于 2014-3-15 23:29
你这种方法是不可以的,必须指明确定的类型。。。不能用通配符

;P 你是自问自答么?;P;P
回复 使用道具 举报
bigbean 发表于 2014-3-15 23:07
你必须指定明确的范围,例如或者

你这种方法是不可以的,必须指明确定的类型。。。不能用通配符
回复 使用道具 举报
你必须指定明确的范围,例如<?extends Person>或者<?super Person>
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马