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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 敷衍ゝ微笑掩盖 初级黑马   /  2014-7-1 17:31  /  878 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

------- <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! ---------
泛型是给编译器看的,用泛型可以穿过编译器向一个ArrayList<Integer> il= new ArrayList<Integer>()的数组中添加一个字符串。
    ArrayList<E>  整个称为泛型
ArrayList<E> E称为类型变量,或类型参数;
ArrayList<Integer> 整个称为参数化类型。
ArrayList<Integer>   中的Integer称为类型参数的实例或实际类型参数。
① 参数化类型与原始类型的兼容性
参数化类型可以引用一个原始类型的对象,编译器报警告。
    Collection<String>  c = new Vector();
原始类型可以引用一个参数化类型的对象,编译器报警告。
Collection  c = new Vector<String>();

② 参数化类型不考虑类型参数的继承关系。
Vector<String>  v= new Vector<Object>();//错误,不写<Object>可以,写了就是明知故犯。
Vector<Object>  v= new Vector<String> ();//错误。

③ 在创建数组实例时,数组的元素不能使用参数化的类型,如
Vector<Integer>  v[]= new Vector<Integer>[10];//错误

④ 泛型的通配符。
使用?统配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
如:  Vector<?> v= new Vector<Integer>();
限定通配符的上边界:
正确:  Vector<? Extends  Number> v= new Vector<Integer>();
错误:  Vector<? Extends  Number> v= new Vector<String>();
限定通配符的下边界:
正确:  Vector<? super  Integer> v= new Vector<Number>();
错误:  Vector<? Super  Integer> v= new Vector<Byte>();
注意:限定通配符总是包括自己。

1 个回复

正序浏览
谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马