6

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

0 回答 0