如何访问泛型的Class对象?

问题描述:

如何访问泛型的Class对象?如何访问泛型的Class对象?

目前,我做这样说:

List<String> list= new ArrayList<String>(); 
list.getClass(); 

这样行吗?或者,应该怎样?

这将返回相同的ArrayList.class。 Java泛型在运行时擦除泛型类型;换句话说,从“列表”你永远不会知道元素类型是字符串。还有在

http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html

这是事实,删除使它不可能得到一个给定对象的泛型类型的信息在这个伟大的FAQ,由于仿制药在源代码的结构只举行。但是,这并不意味着不可能获得泛型类型参数,并且在许多重要情况下(例如,构建给定类/方法的接口),您可以执行此操作。如果通过反射获得类的元素,则可以获得有关所使用的声明类型的通用信息。

例如,通过获取反射一个java.lang.reflect.Method的保持,并调用例如getGenericReturnType()就可以了。这将返回的java.lang.reflect.Type一个实例,它可以是一个简单的Class但也可能是ParameterizedType一个实例,甚至WildcardType在适当情况下。后面这两种情况都允许您查看声明的泛型类型。我不知道有任何特别优雅的方式比instanceof检查来处理这等,但这些信息是存在的,如果你需要它。

这可以使信息在泛型类型的字段,方法参数和返回类型,而类本身(包括其自己的泛型参数和那些其超和实现的接口)的。如果您需要在反射上下文中为泛型方法进行类型安全的参数检查,这可能非常有用。