泛型简介:
泛型(Generic Type)是JDK1.5引入的影响最深远、对语言本身变革最大的Java新特性。
特点:
1)泛型可以将类型作为参数进行传递,即类型可以像参数一样实现参数化。
2)在编译的时候检查类型安全。
3)所有的强制转换都是自动和隐式的。
泛型类:
定义:泛型类即在类的定义中声明了范型参数
泛型类的声明格式:class Test<T>{ //类的体内容 }。
尖括号中出现的T就是一种类型参数,将来使用这个类生成的对象时,该对象所接收的类型便成为在Test类中可使用的真正类型。
泛型类的一个实例:
泛型类可以拥有一个类型,也可以拥有多个类型,例如:class Test<T,U,...>{ //类的体内容 }。
注意:类型参数使用大写形式,且比较短,这是最常使用的。
在Java中,使用E表示集合的元素类型;K和V分别表示键与值的类型;T(需要的时候还可以用U和S等)表示任意类型。
泛型方法
定义:范型方法即在方法定义中声明了范型参数的方法。
泛型方法的声明格式:
修饰符范型声明 返回类型 方法名(参数列表){
//方法体
}
泛型方法的例子:
public <T> static String fun2(Tvalue1,T value2){
returnvalue1+","+value2;
}
public <T,U> void fun(T t1,T t2,Uu1,U u2){
//......
}
受限制的泛型
定义:所谓受限的范型就是在声明范型参数时,对其可代表的类型范围进行限制。
声明受限范型参数的语法格式:
<范型参数 extends 最大范围类型>
示例:
public class MyClass<T extendsNumber> {
//……
}
注:这样定义表示类型参数T只能取Number或者其子类型。
示例:开发一个方法,比较两个同类型对象
public static <T extendsComparable<T>> int pk(T o1,T o2){
if(o1==null&&o2==null){
return0;
}elseif(o1==null){
return-1;
}elseif(o1==null){
return1;
}
returno1.compareTo(o2);
}
使用通配符
定义:在声明范型类的变量时可以使用通配符
使用通配符限制上界:<? extends 上界类型>
示例:
List<? extends Number> list=newArrayList<Integer>();
List<? extends Object> list=newArrayList<String>();
该语句也可写成如下形式:
List<?> list=newArrayList<String>();
注:使用<? extends ...>的定义的对象,不可以调用传递范型参数的方法。
使用通配符限制下界:<? super 下界类型>
示例:
List<? super Number> list=newArrayList<Serializable>();
在创建对象中不可以使用通配符。