Подтвердить что ты не робот

Объект класса универсального класса (java)

Есть ли способ в java, чтобы получить экземпляр чего-то вроде Class<List<Object>>?

4b9b3361

Ответ 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

определенный тип генериков "стирается" во время компиляции.