在方法中获取请求泛型类型

时间:2010-06-25 15:04:11

标签: java reflection generics

我有一个返回泛型类型的方法,有没有办法检索<T>的值而不必通过参数给出它?

public <T> T getObject(String location, String method)
{
    // ! Here I want to retrieve the class of T
    Class<?> requestedClass = getMeTheClassThatWasRequested();

    return requestedClass;
}

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:9)

不,你必须明确传入类型信息。 Java在编译时丢弃所有类型信息。这称为“类型擦除”。这也是为什么集合对象上的toArray方法需要一个T类型的数组才能返回类型为T的数组。它仅将该输入数组用于类型信息。

答案 1 :(得分:2)

Java泛型仅在编译时可用。 Class<?>引用将被编译为Class,并在适当的位置插入强制转换(例如,newInstance方法的返回值)。所以不,你不能。使用它时,必须将其作为泛型类型变量传递给方法。