参数是ArrayList <t>,我如何获得T的className </t>

时间:2012-01-06 04:46:50

标签: java generics

参数是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。

4 个答案:

答案 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