【发布时间】:2021-01-22 15:32:31
【问题描述】:
我的目标是将源对象映射到现有的目标对象,包括一些列表属性(在源和目标中)。 根据documentation,
对于 CollectionMappingStrategy.ADDER_PREFERRED 或 CollectionMappingStrategy.TARGET_IMMUTABLE,目标不会被清除,值将立即填充。
这就是我想要的。
所以我正在制作测试课:
@Data
public class MainClass {
class ClassA {
List<ClassC> list;
}
class ClassB {
List<ClassD> list;
}
class ClassC {
}
class ClassD {
}
}
以及使用 collectionMappingStrategy 和 @MappingTarget 跟随映射器:
@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED)
public interface TestMapper {
TestMapper MAPPER = Mappers.getMapper( TestMapper.class );
void map(List<MainClass.ClassA> sourse, @MappingTarget List<MainClass.ClassB> target);
MainClass.ClassB map(MainClass.ClassA sourse);
}
但在映射器实现中,我看到 清除目标列表,我不需要:
public class TestMapperImpl implements TestMapper {
@Override
public void map(List<ClassA> sourse, List<ClassB> target) {
if ( sourse == null ) {
return;
}
target.clear();
for ( ClassA classA : sourse ) {
target.add( map( classA ) );
}
}
@Override
public ClassB map(ClassA sourse) {
if ( sourse == null ) {
return null;
}
ClassB classB = new ClassB();
return classB;
}
}
我是在阅读还是做错了?
【问题讨论】: