2009-01-19 73 views

回答

3

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

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

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