静态泛型方法
java 中泛型只是一个占位符,必须在传递类型后才能使用,而类在实例化的时候才传递类型参数。静态方法的加载先于类的实例化,也就是说类中的泛型还没有传递真正的类型参数,静态的方法的加载就已经完成了,它们在编译时期并不会引用类上声明的泛型类型参数。因此,在静态方法中,无法直接访问类上声明的泛型类型参数。
如果需要在静态方法中使用泛型类型,可以将泛型类型参数声明在方法自身上,例如public static <E> void printArray( E[] inputArray )
public class atest<E> {
private E value;
public atest(E value) {
this.value = value;
}
// 错误:静态方法不能访问类上声明的泛型类型参数
// public static void printValue() {
// // 尝试在静态方法中使用类上声明的泛型类型参数
// System.out.println(value); // 错误:无法在静态上下文中引用非静态变量 value
// }
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[] intArray = { 1, 2, 3, 4, 5 };
Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
printArray( intArray ); // 1 2 3 4 5
printArray( charArray ); // H E L L O
}
}