一、泛型方法
1、规则
- 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前
- 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。
- 类型参数能被用来声明返回值类型
- 类型参数只能代表引用型类型
//泛型方法
public static <E,T> void method(E[] a,T b) {
for (E e : a) {
System.out.print(e+" ");
}
System.out.println(" "+b);
}
public static void method2() {
int[] a1= {1,2,3};
String[] a2= {"a","b","c"};
Integer[] a3= {1,2,3};
// method(a1,a1[0]); //不能是基本类型
method(a3,a3[0]); //可以是对应的包装类
method(a2,a2[0]);
}
2、有界的类型参数
- 限制类型参数的类型种类范围:返回类型前的类型参数后跟extends,后跟类或接口
//有界的泛型方法
public static <E extends Comparable<E>> void method3(E x,E y) {
if(x.compareTo(y)>0)
System.out.println(x+">"+y);
else
System.out.println(x+"<="+y);
}
public static void method4() {
String a1[]= {"a","b"};
method3(a1[0],a1[1]);
}
二、泛型类
- 泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。
- 和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。
- 这些类被称为参数化的类或参数化的类型。
/**
* 泛型类
* @param T:泛型类型
*/
static class A <T>{
T a;
public A(T a) {
this.a=a;
}
public void print() {
System.out.println("a:"+a);
}
}
public static void method5() {
A<String> a1=new A<String>("abc");
A<Integer> a2=new A<Integer>(new Integer(123));
a1.print();
a2.print();
}