把类型明确的工作推迟到创建对象或调用方法的时候;
Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常;
类型参数:
ArrayList<E>中的E称为类型参数变量
ArrayList<Integer>中的Integer称为实际类型参数
泛型类型:
整个称为ArrayList<E>泛型类型
参数化类型:
整个ArrayList<Integer>称为参数化的类型ParameterizedType
为什么要有泛型
可以将类、接口等作为参数 来定义类、接口、 方法。
通常我们将基本数据类型, 引用类型 的值作为参数, 泛型可以用类、接口 类型作为参数。
泛型能干啥
编译期类型检查;增加了代码的健壮性。
不用强制类型转换了;
使程序员能够实现通用算法;比如集合;
定义泛型类、泛型方法、 泛型接口
通配符: 通配符是泛型实现的另外一种方式, 独立于泛型方法存在
那现在咋办???我们是不清楚List集合装载的元素是什么类型的,List<Objcet>这样是行不通的........于是Java泛型提供了类型通配符 ?
public void test(List<?> list){
?号通配符表示可以匹配任意类型,任意的Java类都可以匹配.....
设定通配符下限
List<? extends Number>
设定通配符上限
//传递进来的只能是Type或Type的父类
<? super Type>
值得注意的是:无论是设定通配符上限还是下限,都是不能操作与对象有关的方法,只要涉及到了通配符,它的类型都是不确定的!
如果参数之间的类型有依赖关系,或者返回值是与参数之间有依赖关系的。那么就使用泛型方法
如果没有依赖关系的,就使用通配符,通配符会灵活一些.
网友评论