Как вы получаете 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]