泛型方法可以定义在普通类中,也可以定义在泛型类中
1 class ArrayAlg{ 2 public static <T> T getMiddle(T...a){ 3 return a[a.length/2]; 4 } 5 }
注意:类型变量放在修饰符后( public static )
当调用泛型方法时,方法名前尖括号中放入具体的类型
String middle=ArrayAlg.<String>getMiddle("John","Q.","Public");
大多数情况下,方法调用可以省略<String>类型参数
String middle=ArrayAlg.getMiddle("John","Q.","Public");
类型变量的限定
有时,类或方法需要对类型变量加以约束
1 class ArrayAlg{ 2 public static <T> T min(T[] a){ 3 if(a==null||a.length==0) return 0; 4 T smallest=a[0]; 5 for(int i=1;i<a.length;i++) 6 if(smallest.compareTo(a[i])>0) 7 smallest=a[i]; 8 return smallest; 9 } 10 }
上例min方法内部,变量smallest类型为T,而且smallest必须有compareTo方法程序才能正常运行
解决的方法是限制T实现Comparable接口
public static <T extends Comparable> T min(T[] a)...
一个类型变量或通配符可以有多个限定,限定类型用&分隔
T extends Comparable & Serializable