is there a way in java to get an instance of something like Class
?>
You could use Jackson's ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
CollectionType listType = objectMapper.getTypeFactory().constructCollectionType(List.class, ElementClass.class)
No unchecked warnings, no empty List instances floating around.
how about
(Class<List<Object>>)(Class<?>)List.class
List.class
the specific type of generics is "erased" at compile time.
public final class ClassUtil {
@SuppressWarnings("unchecked")
public static <T> Class<T> castClass(Class<?> aClass) {
return (Class<T>)aClass;
}
}
Now you call:
Class<List<Object>> clazz = ClassUtil.<List<Object>>castClass(List.class);
As mentioned in other answers, Class
represents an erased type. To represent something like ArrayList<Object>
, you want a Type
. An easy way of getting that is:
new ArrayList<Object>() {}.getClass().getGenericSuperclass()
The generic type APIs introduced in 1.5 are relatively easy to find your way around.
You can get a class object for the List type using:
Class.forName("java.util.List")
or
List.class
But because java generics are implemented using erasures you cannot get a specialised object for each specific class.