泛型的本质是参数化的类型,也就是所操作的类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
一、优势:使程序安全简单
二、泛型类:是在实例化类的时候指明泛型的具体类型
1、定义: class 类名称 <泛型标识T>{
private 泛型标识 变量名;
}
2、使用:
类名 <具体类型> 对象名=new 类名<>();
3、注意事项:
泛型类数据类型参数只支持引用数据类型,不支持基本类型。
例:
public class SimpleGen<T> {
private T a;
public SimpleGen(T a) {
super();
this.a = a;
}
public T getA() {
return a;
}
public void setA(T a) {
this.a = a;
}
public void showType() {
System.out.println(a.getClass().getName());
}
public static void main(String[] args) {
SimpleGen<Integer> sg=new SimpleGen<Integer>(new Integer(27));
sg.showType();
Integer i=sg.getA();
System.out.println("value="+i);
}
}
//输出结果:
java.lang.Integer
value=27
三、泛型方法:是在调用方法时指明泛型的具体类型
1、定义:
访问修饰符 <E> 返回值类型 方法名(参数列表){
方法体
}
2、注意事项:
(1)在泛型类中定义泛型方法不需要在返回值之前加入标识
(2)在普通类中可以定义泛型方法,在返回值之前加入<E>
例:
public class Box {
public static void main(String[] args) {
Integer[] integerAry=new Integer[] {9,5,2,7};
printArray(integerAry);
String[] stringAry=new String[] {"L","S","H","Q"};
printArray(stringAry);
Double[] doubleAry=new Double[] {1.2,3.6,4.5,2.9,5.8};
printArray(doubleAry);
}
public static <E> void printArray(E[] ary) {
for(E e:ary) {
System.out.print(e+"\t");
}
System.out.println();
}
}
//输出结果:
9 5 2 7
L S H Q
1.2 3.6 4.5 2.9 5.8
四、泛型接口:
1、定义:
interface 接口名<T>{
常量;
抽象方法;
}
例:
public interface Box2<T> {
public T getT(T t);
public String getName(T t);
}