在运行时确定泛型方法参数的类型

时间:2010-10-03 16:30:34

标签: java generics reflection

给定具有以下结构的类。我试图确定泛型方法的调用者分配的参数T的类型。

public class MyClass{

    public <T> Boolean IsSupportable() {

        Class typeOfT; // Need to determine Class for generic parameter T

        // Business Logic goes here 

        return true; 
    }
}

在C#中我会使用“default(T)”或“typeof(T)”,但我试图在Java中这样做。有谁知道我是怎么做的?我真的不需要实例,我只需要Class定义。

2 个答案:

答案 0 :(得分:4)

你做不到。您可以做的是使方法签名如下:

public boolean isSupportable(Class<?> type)

然后您可以使用给定的类来检查类型。

答案 1 :(得分:1)

你不能,泛型在运行时不可用。如果您有T的实例,则可以随时检查T object是否是instanceof的特定类的实例。

这是由于type erasure

另一种方法是使用Class类作为参数(请参阅@ ColinD的answer