参数是ArrayList <T>
如何获取T的className
public static <T extends Object> void test(ArrayList<T> list){
T temp;
Class classType=temp.getClass();
System.out.println(classType.getName());
}
编译失败:本地变量temp可能尚未初始化。
但是如何获取模板类的className。
答案 0 :(得分:6)
您无法获得通用类型。这是由于如何在Java中实现泛型(使用类型擦除)。基本上,您只能使用泛型来在编译时捕获类型错误 。
您的代码无法编译,因为您尝试在尚未初始化的本地变量上调用getClass
。
你可以做的是:
Class<T>
参数,告诉方法有关要使用的类型答案 1 :(得分:4)
你不能,因为Java泛型的实现中的类型擦除。当你需要知道这个类时,典型的技巧是将Class作为一个名为“type token”的单独参数传递,如下所示:
public static <T extends Object> void test(ArrayList<T> list, Class<T> classType) {
}
在tutorial on Java generics中详细讨论了这个技巧(参见页面底部的示例)。
答案 2 :(得分:1)
您可以尝试以下方法:
public static <T extends Object> void test(ArrayList<T> list){
if(null!=list && !list.isEmpty())
System.out.println(list.get(0).getClass().getName());
}
答案 3 :(得分:0)
看起来你可以很少包装你的'T'或橡皮擦。以下是与此相关的SO讨论。 Get instance of generic type