泛型概述

集合容器类在 设计阶段/声明阶段 不能确定这个容器到底实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。 泛型的概念 所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属…

泛型类与泛型方法

泛型类 泛型类的声明 interface List 和 class GenTest<K,V> 其中,T,K,V不代表值,而是表示类型。这里使用任意字母都可以。 常用T表示,是Type的缩写。 泛型类的实例化 一定要在类名后面指定类型参数的值(类型)。如: List<String> strList = new ArrayList<String>(); Iterat…

擦拭法

java的虚拟机是没有泛型类型对象的,所有的对象都属于普通类。 擦拭法 无论什么时候定义一个泛型,编译的时候都会自动的匹配一个相应的原始类。这个原始类名就是去掉类型参数后的泛型类型名。类型变量会被擦除,替换为限定类型,或Object(没有限定时)。 例如一个泛型类Pair如下: class Pair<T> { private T first; private T second; pub…

泛型限制与局限性

1.不能使用基本类型代替类型参数,因为基本数据类型么有继承自Object。 ArrayList<int> //错误 ArrayList<Integer> // ok 2.运行时查询只适用于原始类 if (order instanceof Order<Integer>) { // error } if (order instanceof Order<T&gt…

泛型与继承

类型变量的限定 有时,类或方法需要对类型变量加以约束。下面是一个典型的例子,我们要计算数组中的最小元素: class ArrayListUnit { public static <T> T t (T …args) { T item = args[0]; for (int i=1; i < args.length; i++) if (item.compareTo(args[i]…

通配符的使用

无限定通配符 使用类型通配符:? 比如:List<?>,Map<?,?> bool containsAll(Collection<?> c) List<?>是List、List等各种泛型List的父类。 list<?>可读,但不能写。 下面以可读特性举例2个: class Util { public static void show (A…