[英]Class object of generic class (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);
由于类型擦除,在 Class 级别,所有 List 接口都是相同的。 它们仅在编译时不同。 因此,您可以将Class<List>
作为类型,其中List.class
属于该类型,但您无法获得更具体的信息,因为它们不是单独的类,只是被编译器删除的类型声明为显式铸件。
正如其他答案中提到的, Class
代表一种擦除类型。 要表示类似ArrayList<Object>
,您需要一个Type
。 一个简单的方法是:
new ArrayList<Object>() {}.getClass().getGenericSuperclass()
1.5 中引入的泛型类型 API 相对容易找到。
你可以使用杰克逊的ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
CollectionType listType = objectMapper.getTypeFactory().constructCollectionType(List.class, ElementClass.class)
没有未经检查的警告,没有空的 List 实例。
您可以使用以下方法获取 List 类型的类对象:
Class.forName("java.util.List")
或者
List.class
但是因为 Java 泛型是使用擦除实现的,所以您无法为每个特定类获得一个专门的对象。
List.class
特定类型的泛型在编译时被“擦除”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.