为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2021-12-01 16:45:40
我有以下类结构class MapFromBase {}class MapFromChild extends MapFromBase {}class MapToBase {}class MapToChild extends MapToBase {}@Mapperinterface Mapper {  @Mappings(/* a lot of mappings */)  MapToBase mapBase (MapFromBase value);  MapToChild mapChild (MapFromChild value);}有没有办法让mapChild映射器将mapBase映射器用于从基类继承的所有字段,而无需手动复制所有映射?
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

MapStruct 具有继承配置的机制。在您的情况下,我将定义一个共享映射配置(带注释@MapperConfig)而不是映射器的继承,并将此共享配置包含在您的@Mapping. 然后可以使用此共享配置@MapFromChild@MapFromBase。这样你就可以使用组合而不是继承。

共享配置也可以通过@MapToBase和反向继承@MapToChild

如果您使用1.3Beta,则有新选项可以自动继承映射器中的所有选项(以及相反的选项)


查看完整回答
反对 回复 2021-12-01
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

您必须链接 MapFromChild 和 MapToChild。您可以为它使用通用标记。


class ChildType {        

}

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>  {

}


@Mapper

interface Mapper <X extends ChildType> {

    MapToBase<X> universalMap (MapFromBase<X> value);

}

ChildType 也可以是一个接口。


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 245 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信