如何从方法的类型参数中获取类对象?



我有一个类型参数化方法,但我不能在类型参数化参数上调用getClass,因为它可以是null,所以我看到的唯一解决方案是从类型参数本身获得Class,以某种方式:

public <T> Class myMethod(T obj)
{
    //can't do this: return obj.getClass() because null is permitted.
}

这个方法简单地说明了这个问题。我的实际方法甚至没有返回参数的类,而是以不同的方式使用它。问题的核心是:是否有一种方法可以获得代表我的方法参数的参数化类型的Class对象,而不使用obj.getClass()(因为在obj是null的情况下,我仍然需要知道方法调用的类型参数,例如:<String>myMethod(null)必须返回java.lang.String类对象)。

EDIT这不是上述问题的重复,因为我的类没有参数化,只有我的方法。

问题的核心是:是否有一种方法来获得代表我的方法的参数的参数化类型的Class对象[…]

Class不包含类型参数值的任何信息。Class只包含关于类的定义的数据,而不包含关于类型使用的数据。事实上,由于类型擦除(参见https://docs.oracle.com/javase/tutorial/java/generics/genMethods.html (methods)和https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html (types)),您无法获得关于类型参数的此类信息。

解决方案是将方法重构为:

public <T> Class<T> myMethod(Class<T> theClass, T obj)
    // other stuffs
    return theClass;
}

但是调用者已经知道T是什么,所以真正的问题是,为什么需要它。

=> community wiki

相关内容

  • 没有找到相关文章