如何在 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
对象 ,但是好吧,没有任何保证:)
我发现的关于 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
对象 ,但是好吧,没有任何保证:)