Как вы получаете List <Type> с отражением?

Я получаю метод и проверяю method.getParameterTypes()[0], который является java.util.List. Но я хочу выяснить, что такое тип содержимого, например, если он java.util.List<String>, я хочу понять, что он должен содержать строки.

Как это сделать?

Спасибо!

Ответ 1

Type listType = method.getGenericParameterTypes()[0];
if (listType instanceof ParameterizedType) {
    Type elementType = ((ParameterizedType) listType).getActualTypeArguments()[0];
}

Обратите внимание, что тип элемента не должен быть фактическим Class как String - он может быть переменной типа, подстановочным типом и т.д.

Вы можете узнать больше о скрещивании генерических данных из отраженных элементов здесь и здесь.

Ответ 2

Это просто: вы не можете. Во время компиляции Java стирает общие типы (см. Тип стирания).

Вы можете увидеть здесь и здесь для получения дополнительной информации о GetGenericType (который я не сделал знаю, честно), но это кажется довольно ограниченным.

Ответ 3

У меня была такая же проблема, и я сделал это ниже

здесь: ваш класс инициализируется как clazz (например, Company.Class) и ваша коллекция как

List<Employees> companyEmployee

String collectionType - Список

String collectionContent - Сотрудник


Method[] methodList = clazz.getDeclaredMethods();
Method classMethod = methodList[0];

String[] collection= classMethod.getReturnType().toString().split("\\.");

String collectionType = collection[collection.length - 1]

String collectionContent = classMethod.getGenericReturnType().getTypeName().split("<")[1].split(">")[0]