是否可以通过给定的参数获得泛型类?

时间:2018-01-22 10:31:25

标签: java generics reflection

假设我有“java.util.List<java.lang.String>”作为String中的参数。我想把它作为类或类型,类似的东西:

ClassLoader cl=Thread.currentThread().getContextClassLoader();
Class clazz=cl.loadClass("java.util.List<java.lang.String>");

有可能吗?

例如,以下代码有效:

ClassLoader cl=Thread.currentThread().getContextClassLoader();
Class clazz=cl.loadClass("java.util.List");

2 个答案:

答案 0 :(得分:1)

运行时Java擦除通用。永远不会有Class List<String>

如果您想要Type代表List<String>,则应为ParameterizedType。您可以使用我的utleity类GenericUtil构建一个

public static ParameterizedType createParameterizedType(Class<?> rawType, Type ownerType, Type... actualTypeArguments);

Type listString = createParameterizedType(List.class, null, String.class);

如果您想构建List<String>的实例,可以将List强制转换为List<String>

List list = ...;
List<String> listString = (List<String>)list;

答案 1 :(得分:0)

你的问题很模糊,我假设你想通过他的类名创建一个类实例,所以你要找的是方法 Class.forName()

然而正如@GhostCat在评论中指出的那样,你无法创建一个String列表,因为TypeErasure,你只能创建Object的泛型列表, 您应该了解泛型类型的工作原理:Here