面试题答案
一键面试规则
- 独立定义类型参数:静态方法的泛型类型参数需要独立定义,不能依赖于类的泛型参数,因为静态方法属于类,而非类的实例,在类加载时就存在,此时类的泛型参数可能还未确定。
- 类型参数声明位置:泛型类型参数声明在方法的修饰符(如
public
、static
等)之后,返回类型之前。
特别注意的地方
- 不能使用类的泛型参数:如上述规则所提,静态方法不能直接使用类定义的泛型参数,必须自己声明泛型参数。
- 类型擦除:和普通泛型一样,Java 泛型在编译后会发生类型擦除,运行时无法获取泛型的具体类型信息,这可能导致一些潜在的运行时错误,例如在需要强转泛型类型时要特别小心。
示例
public class GenericStaticMethodExample {
// 定义一个带有泛型参数的静态方法
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.print(element + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] intArray = {1, 2, 3, 4, 5};
String[] stringArray = {"apple", "banana", "cherry"};
printArray(intArray);
printArray(stringArray);
}
}
在上述示例中,printArray
方法是一个静态泛型方法,<T>
是它自己独立声明的泛型类型参数。这个方法可以接受任何类型的数组并打印其元素,main
方法中分别传入了 Integer
数组和 String
数组进行测试。