Вот скелет решения:
public interface Converter {
boolean canConvert(Class<?> sourceCls, Type targetType);
Object convert(Object source, Class<?> sourceClass, Type targetType) throws CannotConvertException;
}
Обратите внимание, что тип источника - Class
, но цель - Type
. Если это Class
, то код может быть делегирован одной из существующих библиотек. Если targetType
является ParameterizedType
, то из него можно получить аргументы типа (классы), тогда для преобразования в них можно использовать стандартные библиотеки.
Для использования:
- для полей:
Type targetType = field.getGenericType()
- для методов установки:
Type targetType = method.getGenericParameterTypes()[0]