泛型介绍

使用泛型机制编写的代码比杂乱地使用Object变量,然后再进行强制类型转换的代码更具有安全性和可读性

泛型程序设计意味着编写的代码可以被不同类型的对象所重用

一个泛型类就是有一个或多个类型变量的类,类型变量使用大写形式且比较短

泛型类可以看做普通类的工厂

泛型方法可以定义在普通类中也可以定义在泛型类中

public <T> T get(T t)    类型参数<T>放在访问修饰符后面,返回类型的前面,调用时要在方法名前面的尖括号里放入具体的类型  如:String hehe = 类.<String>方法名();

类型变量的限定,有时类或方法需要对类型变量加以约束 如:public static <T extends Comparable> T min(T[] t)   <T extends Comparable>表示T应该是绑定类型的子类型,T和绑定类型可以是类或者接口,选择extends是因为更接近子类的概念

一个类型变量可以有多个限定 T extends Comparable & Serializable

翻译泛型表达式:

  1. 当程序调用泛型方法时,如果擦除返回类型,编译器会插入强制类型转换 Pair<Employee>  p ;  Employee  e = p.getFirst(); 擦除getFirst的返回类型后将返回Object类型,编译器自动插入Employee的强制类型转换
  2. 也就是说编译器把这个方法调用翻译成两条虚拟机指令:对原始方法Pair.getFirst的调用;将返回类型Object强制转换为Employee类型

当存取一个泛型域时也要加入强制类型转换

使用java泛型时需要考虑一些限制:

不能用基本类型实例化类型参数

运行时类型查询只适用于原始类型,java虚拟机中的对象总有一个特定的非泛型类型,因此所有的类型查询只产生原始类型,同样,getClass方法也是返回原始类型

不能创建参数化类型数组

如果需要收集参数化类型对象,只有一种安全而有效的方法ArrayList<Pair<String>>

不能实例化类型变量,但是可以通过反射来调用Class.newInstance方法来构造泛型对象

posted @ 2016-11-19 13:20  下雨天MJ  阅读(100)  评论(0)    收藏  举报