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

标签 java generics reflection

我发现的关于泛型类型的 java 反射的每个问题都是关于获取泛型类型的参数。 就我而言,我有一个 ParameterizedType 并且想要获取 Generic 容器类。

例如,假设一个

ParameterizedTypeImpl.toString()

返回

java.util.List<test.Bar>

现在我想获得一个java.util.List的类。

这对你来说可能有点奇怪,但我需要你假设它就是这样!

所以我需要的是类似的东西

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

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

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

谢谢。

最佳答案

getRawType应该这样做吗?

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

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

关于java - 如何在java中获取ParameterizedType的通用容器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28543714/

相关文章:

java - 在 catch 和 finally 子句中抛出异常

java - 泛型并在 Java 中转换

C#虚静态方法

java - 通过显式指定类型见证来调用类构造函数

reflection - 为什么需要在gRPC服务器上注册反射服务

java - 反射。执行构造函数

java - SpringBoot 使用 MongoDB 实现通用 DAO

java - 获取插入行的id

java - 我如何模拟提供使用 JMockit 模拟的类的实例的静态方法?

.net - 获取枚举值的 GetFields 方法