------- <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>();
注意:限定通配符总是包括自己。 |
|