猿问

使用基类的映射器来映射子类

我有以下类结构


class MapFromBase {

}


class MapFromChild extends MapFromBase {

}


class MapToBase {

}


class MapToChild extends MapToBase {

}


@Mapper

interface Mapper {

  @Mappings(/* a lot of mappings */)

  MapToBase mapBase (MapFromBase value);


  MapToChild mapChild (MapFromChild value);

}

有没有办法让mapChild映射器将mapBase映射器用于从基类继承的所有字段,而无需手动复制所有映射?


梵蒂冈之花
浏览 246回答 2
2回答

沧海一幻觉

MapStruct 具有继承配置的机制。在您的情况下,我将定义一个共享映射配置(带注释@MapperConfig)而不是映射器的继承,并将此共享配置包含在您的@Mapping. 然后可以使用此共享配置@MapFromChild和@MapFromBase。这样你就可以使用组合而不是继承。共享配置也可以通过@MapToBase和反向继承@MapToChild。如果您使用1.3Beta,则有新选项可以自动继承映射器中的所有选项(以及相反的选项)

陪伴而非守候

您必须链接 MapFromChild 和 MapToChild。您可以为它使用通用标记。class ChildType {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;}class Child extends ChildType {}class SuperChild extends ChildType {}class OtherChild extends ChildType {}class MapFromBase<T extends ChildType> {}class MapFromChild extends MapFromBase<Child> {}class MapToBase<T extends ChildType> {}class MapToChild extends MapToBase<Child>&nbsp; {}@Mapperinterface Mapper <X extends ChildType> {&nbsp; &nbsp; MapToBase<X> universalMap (MapFromBase<X> value);}ChildType 也可以是一个接口。
随时随地看视频慕课网APP

相关分类

Java
我要回答