繁体   English   中英

泛型类的类对象(java)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM