Я использую Spring GenericConversionService.
Рассматриваемый метод конвертации имеет следующую подпись:
public <T> T convert(Object source, Class<T> targetType)
List<B>.class
- недопустимый синтаксис Java.
Это сработало для меня:
List<A> sourceList = ...;
conversionService.convert(sourceList, (Class<List<B>>)(Class<?>)List.class);
Получил идею отсюда: StackOverflow - Объект класса общего класса
Редактировать:
Выше не сработало.Нет ошибок компиляции, однако это привело к тому, что sourceList не был преобразован и был назначен для targetList.Это приводило к различным исключениям в нисходящем направлении при попытке использовать targetList.
Мое текущее решение состоит в том, чтобы расширить GenericConversionService в Spring и добавить собственный метод преобразования для обработки списков.
Вот метод преобразования:
@SuppressWarnings({"rawtypes", "unchecked"})
public <T> List<T> convert(List<?> sourceList, Class<T> targetClass) {
Assert.notNull(sourceList, "Cannot convert null list.");
List<Object> targetList = new ArrayList();
for (int i = 0; i < sourceList.size(); i++) {
Object o = super.convert(sourceList.get(i), targetClass);
targetList.add(o);
}
return (List<T>) targetList;
}
И это можно назвать так:
List<A> sourceList = ...;
List<B> targetList = conversionService.convert(sourceList, B.class);
Люблю посмотреть, есть ли у кого-нибудь лучший способ справиться с этим распространенным сценарием.