generics类的类对象(java)

在java中有一种方法来获取像Class<List<Object>>的实例吗?

怎么样

 (Class<List<Object>>)(Class<?>)List.class 
 public final class ClassUtil { @SuppressWarnings("unchecked") public static <T> Class<T> castClass(Class<?> aClass) { return (Class<T>)aClass; } } 

现在你打电话给:

 Class<List<Object>> clazz = ClassUtil.<List<Object>>castClass(List.class); 

由于types擦除,在Class级别,所有List接口都是相同的。 它们在编译时只有不同。 所以你可以让Class<List>作为一个types,其中List.class是这种types的,但是你不能得到比这更具体的东西,因为它们不是单独的类,只需要input被编译器清除的声明pipe型。

正如其他答案中所提到的, Class表示一个已擦除types。 要表示像ArrayList<Object>东西,你需要一个Type 。 一个简单的方法是:

 new ArrayList<Object>() {}.getClass().getGenericSuperclass() 

在1.5中引入的genericstypes的API相对比较容易find你的方式。

你可以使用Jackson的ObjectMapper

 ObjectMapper objectMapper = new ObjectMapper(); CollectionType listType = objectMapper.getTypeFactory().constructCollectionType(List.class, ElementClass.class) 

没有未经检查的警告,没有空的List实例浮动。

您可以使用以下命令获取Listtypes的类对象:

 Class.forName("java.util.List") 

要么

 List.class 

但是因为Javagenerics是使用删除来实现的,所以你不能为每个特定的类获得一个专门的对象。

 List.class 

generics的具体types在编译时被“擦除”。