使用基础 class 的映射器来映射子 class
Use the mapper for the base class to map the child class
我有以下class结构
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
映射器对从基础 class 继承的所有字段使用 mapBase
映射器,而无需手动复制所有映射?
您必须 link 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 也可以是一个接口。
MapStruct 具有 inherit configurations 的机制。在你的情况下,我会定义一个共享映射配置(注释 @MapperConfig
)而不是映射器的继承,并将这个共享配置包含在你的 @Mapping
中。然后 @MapFromChild
和 @MapFromBase
可以使用此共享配置。这样你就可以使用组合而不是继承。
共享配置也可以被@MapToBase
和@MapToChild
反向继承。
如果您使用 1.3Beta,有新的选项可以自动继承映射器中的所有选项(以及反向选项)
我有以下class结构
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
映射器对从基础 class 继承的所有字段使用 mapBase
映射器,而无需手动复制所有映射?
您必须 link 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 也可以是一个接口。
MapStruct 具有 inherit configurations 的机制。在你的情况下,我会定义一个共享映射配置(注释 @MapperConfig
)而不是映射器的继承,并将这个共享配置包含在你的 @Mapping
中。然后 @MapFromChild
和 @MapFromBase
可以使用此共享配置。这样你就可以使用组合而不是继承。
共享配置也可以被@MapToBase
和@MapToChild
反向继承。
如果您使用 1.3Beta,有新的选项可以自动继承映射器中的所有选项(以及反向选项)