我有以下代码:
public class EntityA {
private List<? extends AbstractObject> objects;
}
public class EntityB {
private List<? extends AbstractObjectDTO> dtos;
}
我有一个通用映射器:
public interface GenericMapper<X extends AbstractObjectDTO, Y extends AbstractObject> {
Y mapDTOToEntity(X value);
X mapEntityToDTO(Y value);
}
@Mapper
public interface ConcreteMapper extends GenericMapper<ConcreteDTO, ConcreteObject> {}
在编译时,它会生成以下错误:
无法将属性“List<? extends AbstractObject>
对象”映射到“List<? extends AbstractObjectDTO>
dtos”。考虑声明/实现映射方法:“List<? extends AbstractObjectDTO> map(List<? extends AbstractObject> value)
”。
当我实现错误中显示的map方法时,我遇到以下错误: 无法为通用类型变量源生成映射方法。
如何正确映射列表?
答案 0 :(得分:0)
在MapStruct中,使用MapperConfig进行泛化。
您需要定义MapperConfig,如
@MapperConfig(mappingInheritanceStrategy=MappingInheritanceStrategy.AUTO_INHERIT_FROM_CONFIG)
public interface MapConfig{
AbstractObject mapToObject(AbstractObjectDTO dto);
AbstractObjectDTO mapToDTO(AbstractObject ob);
}
在mapper类中使用此配置,如:
@Mapper(config=MapConfig.class)
public interface YourMapperinterfacce{
//Concrete object mappings
}
我没有尝试过泛型,你可以试试MapperConfig。
答案 1 :(得分:0)
你可以实现你想要的目标。
您需要具备以下方法:
"Cannot read keys when either application does not have a console or when console input has been redirected. Try Console.Read."
最重要的是MapStruct应该如何生成您要映射的对象。 MapStruct在编译期间生成代码,因此您需要适当地实现它。
如果你想在运行时找到类型,你甚至需要做类似的事情:
List<AbstractObjectDto> map(List<? extends AbstractObject> value);
List<AbstractObject> mapDto(List<? extends AbstractObjectDto> value);
@ObjectFactory
default AbstractObjectDto createDto() {
return null; // implement your own logic
}
@ObjectFactory
default AbstractObject createEntity() {
return null; // implement your own logic
}