如何在模型映射器转换器中使用泛型

Joh*_*icz 5 java modelmapper

我正在尝试使用 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;

}    
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其添加到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());
  }
}    
Run Code Online (Sandbox Code Playgroud)