我正在尝试使用 aConverter
来指定 DTO 中的简单字符串字段到作为TypedString
另一个复杂对象一部分的 -Object 的映射。问题是,这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());
}
}