小智 33
public final class ClassUtil {
@SuppressWarnings("unchecked")
public static <T> Class<T> castClass(Class<?> aClass) {
return (Class<T>)aClass;
}
}
Run Code Online (Sandbox Code Playgroud)
现在你打电话:
Class<List<Object>> clazz = ClassUtil.<List<Object>>castClass(List.class);
Run Code Online (Sandbox Code Playgroud)
Yis*_*hai 10
由于类型擦除,在类级别,所有List接口都是相同的.它们在编译时只是不同的.所以你可以Class<List>作为一个类型,在List.class那种类型的地方,但你不能得到更具体的,因为它们不是单独的类,只是类型声明被编译器删除到显式转换.
如其他答案中所述,Class代表擦除类型.要表示类似的东西ArrayList<Object>,你需要一个Type.一个简单的方法是:
new ArrayList<Object>() {}.getClass().getGenericSuperclass()
Run Code Online (Sandbox Code Playgroud)
1.5中引入的泛型API相对容易找到方法.
您可以使用以下方法获取 List 类型的类对象:
Class.forName("java.util.List")
Run Code Online (Sandbox Code Playgroud)
或者
List.class
Run Code Online (Sandbox Code Playgroud)
但是因为 java 泛型是使用擦除来实现的,所以您无法为每个特定类获取专门的对象。