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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天天天 初级黑马   /  2012-12-8 14:42  /  1609 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

       
List<?>中?是通配符,那就意味着可以匹配各种对象,List<Object>中各种对象都是Object的子类,那这两各形式有什么不同呢?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
泛型等于是一种数据结构或一个函数可用在多种类型的对象上。
如果在调用或声明创建一个泛型函数或结构时指定了类型,那么后续操作产生的结果将直接是你指定的类型。不必再进行转型操作了

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
?不仅可以匹配各种对象,还可以定义上下边界1.       
限定通配符的上边界:
Vector<? extends Number> x = new Vector<Integer>();
限定通配符的下边界:
Vector<? super Integer> x = new Vector<Number>();

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用于做引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
泛型中的?通配符的扩展
1.限定通配符的上边界:
     正确:Vector<? extends Number> x = new Vector<Integer>();
     错误:Vector<? extends Number> x = new Vector<String>();
2. 限定通配符的下边界:
     正确:Vector<? super Integer> x = new Vector<Number>();
     错误:Vector<? super Integer> x = new Vector<Byte>();
注:限定通配符总是包括自己。
回复 使用道具 举报
?通配符和Object都可以接受任意类型。
List<Object> l = new List<Object>();此时List集合能接收任意类型;
但是用?定义泛型时就可以限定List接收的类型。比如:
class Person{
......
}
class Student extends Person{
....
}
当定义一个ArrayList<? extends Person> al = new ArrayList<? extends Person>();此时ArrayList集合中只接收Person类和Person的子类Student...可能还有更多子类;
当定义成这样ArrayList<? super Student> al = new ArrayList<? super Student>();此时ArrayList集合中只接收Student类和Student的父类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马