Converter
を使用して、DTO の単純な文字列フィールドから、TypedString
別の複雑なオブジェクトの一部である -Objectへのマッピングを指定しようとしています。問題は、それTypedString
がいくつかの実装のインターフェースであることです。このようなコンバーターは、特定の実装を使用する場合は機能しますが、実行時にジェネリックを使用して Type を定義する場合は機能しません (以下を参照)。この場合、コンバーターは、実行時に呼び出したときに選択されません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
(ie 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());
}
}