Есть ли способ в java, чтобы получить экземпляр чего-то вроде Class<List<Object>>
?
Объект класса универсального класса (java)
Ответ 1
как насчет
(Class<List<Object>>)(Class<?>)List.class
Ответ 2
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);
Ответ 3
Из-за стирания типа на уровне класса все интерфейсы списка одинаковы. Они отличаются только во время компиляции. Таким образом, вы можете иметь Class<List>
как тип, где List.class
относится к этому типу, но вы не можете получить более конкретное, чем это, потому что они не являются отдельными классами, просто введите объявления, которые стираются компилятором в явные отбрасывания.
Ответ 4
Как упоминалось в других ответах, Class
представляет стираемый тип. Чтобы представить что-то вроде ArrayList<Object>
, вам нужен Type
. Легкий способ получить это:
new ArrayList<Object>() {}.getClass().getGenericSuperclass()
API-интерфейсы типового типа, представленные в 1.5, относительно легко найти свой путь.
Ответ 5
Вы можете использовать Jackson ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
CollectionType listType = objectMapper.getTypeFactory().constructCollectionType(List.class, ElementClass.class)
Нет предупреждений, не содержащих пустых экземпляров.
Ответ 6
Вы можете получить объект класса для типа List, используя:
Class.forName("java.util.List")
или
List.class
Но поскольку java generics реализованы с использованием erasures, вы не можете получить специализированный объект для каждого конкретного класса.
Ответ 7
List.class
определенный тип генериков "стирается" во время компиляции.