java - Java使用反射创建泛型参数化类

标签 java generics reflection parameterized

如何使用反射在 Java 中创建通用参数化类?

我有

public class SomeClass<T> {
   public SomeClass<T>() {
   }
}

我需要它的一个实例。

我试过各种变体

Class c = Class.forName("SomeClass");

但找不到允许我获得适当类型实例的语法,例如

SomeType instance = (SomeType)Class.forName("SomeClass<SomeType>").createInstance();

那么,我该怎么做呢?

最佳答案

Java 使用基于删除的泛型(即,类型参数在运行时被删除——例如,List<Integer>List<String> 在运行时被视为相同类型)。由于反射本质上是一种运行时功能,因此根本不使用或不涉及类型参数。

换句话说,当您使用反射时,您只能实例化原始类型( SomeClass ,而不是 SomeClass<T> )。然后,您必须手动将类型转换为通用版本(并生成 unchecked 警告)。

关于java - Java使用反射创建泛型参数化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373800/

相关文章:

java - 从 ArrayList 数组中检索数据

c# - 使用通用回调是一种不好的形式吗?

c# - 在运行时生成通用类型

c# - 类型来自 PropertyInfo.PropertyType 的通用类实例

java - 使用for循环调试(eclipse)无法得到预期的答案

java - 为什么我从字符串中得到错误的 HashCode?

java - BufferedImage getSubimage 抛出异常,参数看似不错

ios - 无法将类实例分配给它的协议(protocol)类型?

c# - 无法将表达式类型转换为返回类型

c# - System.Reflection - 如何调用子级别类型的 getter 方法?