@SubclassMapping顺序
@SubclassMapping order
第一次使用MapStruct (1.5.0.Beta2)
假设我有以下 class 层次结构:C extends B extends A
和 Cdto extends Bdto extends Adto
。以及以下映射器:
@Mapper(componentModel = "spring", subclassExhaustiveStrategy = RUNTIME_EXCEPTION)
public interface MyMapper{
@SubclassMapping(source = B.class, target = Bdto.class)
@SubclassMapping(source = C.class, target = Cdto.class)
Adto map(A source);
}
当我映射一个 C 对象列表时,我实际上得到了一个 Bdto 列表。但是,如果我将顺序更改为:
@Mapper(componentModel = "spring", subclassExhaustiveStrategy = RUNTIME_EXCEPTION)
public interface MyMapper{
@SubclassMapping(source = C.class, target = Cdto.class)
@SubclassMapping(source = B.class, target = Bdto.class)
Adto map(A source);
}
我得到了预期的 Cdto 列表。这是设计使然吗?有什么办法可以减少对注释顺序的依赖?
这是设计使然。 The reason for this is to let the user control the order for the mappings. 相同的行为用于 @Mapping
注释。
您的第一个示例也应该得到编译器警告,尽管它目前可能引用了错误的类型(目标而不是源)。这应该会在下一个版本中修复。
第一次使用MapStruct (1.5.0.Beta2)
假设我有以下 class 层次结构:C extends B extends A
和 Cdto extends Bdto extends Adto
。以及以下映射器:
@Mapper(componentModel = "spring", subclassExhaustiveStrategy = RUNTIME_EXCEPTION)
public interface MyMapper{
@SubclassMapping(source = B.class, target = Bdto.class)
@SubclassMapping(source = C.class, target = Cdto.class)
Adto map(A source);
}
当我映射一个 C 对象列表时,我实际上得到了一个 Bdto 列表。但是,如果我将顺序更改为:
@Mapper(componentModel = "spring", subclassExhaustiveStrategy = RUNTIME_EXCEPTION)
public interface MyMapper{
@SubclassMapping(source = C.class, target = Cdto.class)
@SubclassMapping(source = B.class, target = Bdto.class)
Adto map(A source);
}
我得到了预期的 Cdto 列表。这是设计使然吗?有什么办法可以减少对注释顺序的依赖?
这是设计使然。 The reason for this is to let the user control the order for the mappings. 相同的行为用于 @Mapping
注释。
您的第一个示例也应该得到编译器警告,尽管它目前可能引用了错误的类型(目标而不是源)。这应该会在下一个版本中修复。