使用Java泛型,我们可以写一个泛型方法来对一个对象数组排序,然后,调用该泛型来对整形数组、浮点数数组、字符串数组等进行排序。
1. 泛型方法
下面是定义泛型方法的规则:
所有泛型方法什么都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前。
下面是一个泛型方法的实例:
public class GenericMethodTest
{
// 泛型方法 printArray
public static < E > void printArray( E[] inputArray )
{
// 输出数组元素
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
public static void main( String args[] )
{
// 创建不同类型数组: Integer, Double 和 Character
Integer[] intArray = { 1, 2, 3, 4, 5 };
Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
System.out.println( "Array integerArray contains:" );
printArray( intArray ); // 传递一个整型数组
System.out.println( "\nArray doubleArray contains:" );
printArray( doubleArray ); // 传递一个双精度型数组
System.out.println( "\nArray characterArray contains:" );
printArray( charArray ); // 传递一个字符型型数组
}
}
交换数组中的两个元素的位置的泛型方法定义如下:
public static <T> void swap(T[] array, int i, int j) {
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
- 用于放置泛型的类型参数的尖括号<T>应出现在方法的其它所有修饰符之后和在方法的的返回类型之前,按照惯例,通常使用某单个大写字母表示。
- 注意类型参数只能代表引用型类型,不能是原始类型。swap(new int[3, 5], 0, 1); 语句是会编译报错的。
- 普通方法、构造方法、静态方法都可以使用泛型。
- 在泛型中可以同时使用多个类型参数,在定义时用尖括号分开,例如:
private static <K, V> void sayHello(K k, V v) {
}
public static void trans1(Collection<?> collection) {
return;
}
public static void trans2(Collection<? extends Number> collection) {
return;
}
3. 泛型类
public class Box<T> {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
}
注意:
在对泛型类进行参数化时,类型参数的实例必须是引用类型,不能使基本类型。
当一个变量被声明为泛型时,只能被实例变量和方法调用,而不能被静态变量和静态方法调用。