泛型程序设计

来源:互联网 发布:网络英语哪里学比较好 编辑:程序博客网 时间:2024/05/29 07:21

类型参数提高了可读性、安全性

泛型类的定义:

public class Pair<T> {   private T first;   private T second;   public Pair() { first = null; second = null; }   public Pair(T first, T second) { this.first = first;  this.second = second; }   public T getFirst() { return first; }   public T getSecond() { return second; }   public void setFirst(T newValue) { first = newValue; }   public void setSecond(T newValue) { second = newValue; }}

泛型方法定义:

 public static <T extends Comparable> Pair<T> minmax(T[] a) 


虚拟机没有泛型类型对象。

定义泛型类型,都自动提供了一个相应的原始类型(第一个限定类型或Object类型)


翻译泛型表达式(编译器插入强制类型转换)

类型擦除与多态可能发生冲突,(编译器生成一个桥方法,以保持多态)


约束与限制:(类型擦除引起)

不能用基本类型实例化类型参数,没有Pairm<double>,只有Pair<Double>


运行时类型查询只适应原始类型

Pair<String> stringPair=...

Pair<Employee> employeePair=...

if(stringPair.getClass() == employeePair.gatClass())                //PairClass 相同


不能创建参数化类型数组

Pair <String>[] table = new Pair <String>[10];    //Error

不能实例化类型变量

new T()           new T[]           T.Class 都错误

可以使用:

public  <T> Pair<T>  make(Class<T> c1){

c1.newInstance();

}   // Class类本身是泛型


泛型类的静态上下文中类型变量无效


不能抛出或捕获泛型类的实例

public class Problem<T> extends Exception{}  // Error

可以

public static <T extends Trowable>  void  doWork(T t) throws T{}// 合法



通配符的超类型限定  ? super Manager



0 0
原创粉丝点击