如何在 java 中获取 ParameterizedType 的通用容器 class

How to get generic container class of a ParameterizedType in java

我发现的关于 java 对泛型类型的反思的每个问题都是关于获取泛型类型的参数。 在我的例子中,我有一个 ParameterizedType 并且想要获得通用容器 class.

例如,假设

ParameterizedTypeImpl.toString()

returns

java.util.List<test.Bar>

现在我想要 Class 的 java.util.List。

这对您来说可能听起来有点牵强,但我需要您假设它就是它!

所以我需要的是

 Class cls = ((MagicCast)ParameterizedTypeImpl.mayBeAMagicHere()).someOtherMagic();
 //Now cls is of type List

我能想到的唯一方法是使用 subString 或正则表达式从 ParameterizedTypeImpl.toString() 中获取 java.util.List 然后使用 class.forName 获取 class. 但我不知道它的便携性如何。 java 的某些版本是否可能对 ParameterizedTypeImpl 的 toString 有其他实现?

还有比这更好的解决方案吗?

谢谢。

getRawType 应该成功吗?

Class<?> theClass = (Class<?>) yourParameterizedType.getRawType();

转换应该是安全的,因为文档说返回值是 代表 class 或声明此类型的接口的 Type 对象 ,但是好吧,没有任何保证:)