泛型
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。(类型变量)
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
- 泛型的作用
可以在类声明时通过法的返回值的类型,或者是参数类型。
个标识表示类中某个属性的类型
常用的类型参数的字母或者符号有:E、T、K、V、N、?Object等
E : Element的缩写,一般在集合中使用,表示集合中的元素类型。
T : Type的缩写,一般表示Java类。
K : Key的缩写,一般用来表示“键”,如Map种的key。
V : Value的缩写,一般用来表示“值”与K是一对。
N : Number的缩写,通常用来表示数值类型。
-
自定义泛型
- 基本语法-泛型类
//可以定义多个泛型 class Name <T,R>{ ... } //泛型要填入包装类型 Name<String,Intger> //如果不指定类型,默认视为Object类型 Name<> <===> Name<Object,Object>
- 泛型方法
public class Pair<T> { private T first; private T last; public Pair(T first, T last) { this.first = first; this.last = last; } public T getFirst() { return first; } public T getLast() { return last; } //泛型类型<T>不能用于静态方法 public static Pair<T> create(T first, T last) { return new Pair<T>(first, last); } }
- 泛型接口
interface Name <T,R>{ ... } //)接口中,静态成员也不能使用泛型(这个和泛型类规定一样) //泛型接口的类型,在继承接口或者实现接口时确定 //没有指定类型,默认为Object
-
泛型通配符
- <?>支持任意泛型类型
- <? extends A>支持A类以及A类的子类
- <? super A>支持A类以及A类的父类