Как использовать дженерики в конвертере моделей
Я пытаюсь использовать Converter
указать отображение простого поля String в DTO на TypedString
-Объект, который является частью другого сложного объекта. Проблема в том, что TypedString
Интерфейс для нескольких реализаций Такой конвертер работает, если я использую конкретную реализацию, но не если я использую обобщенные типы для определения Типа во время выполнения (см. Ниже). В этом случае конвертер не выбран во время выполнения, когда я звонил modelmapper.map()
,
Это не подходит для меня, потому что я должен написать конвертеры для каждой реализации.
Можно ли использовать дженерики для определения типа назначения во время выполнения?
PS: преобразователь тока создает экземпляр с помощью отражения, который работает!
Благодарю.
Этот код работает
import org.modelmapper.Converter;
import org.modelmapper.ModelMapper;
import org.modelmapper.spi.MappingContext;
public class MyModelMapper extends ModelMapper {
public MyModelMapper() {
super();
Converter<?, ?> converter = new Converter<String, ParticularDestType>() {
@Override
public SupplierId convert(MappingContext<String, ParticularDestType> context) {
return (ParticularDestType) TypedStringConverter.createNewInstanceFromValue(context
.getSource(), ParticularDestType.class);
}
};
addConverter(converter);
}
}
@AllArgsConstructor
public class ParticularDestType implements TypedString {
private String value;
}
Но это не работает, если я добавлю это в MyModelMapper
(т.е.addConverter(new ModelMapperTypedStringConverter<ParticularDestType>())
)!!!
import org.modelmapper.Converter;
import org.modelmapper.spi.MappingContext;
public class ModelMapperTypedStringConverter<T extends TypedString> implements Converter<String, T> {
@Override
public T convert(MappingContext<String, T> context) {
return (T) TypedStringConverter.createNewInstanceFromValue(context.getSource(), context.getDestinationType());
}
}