gpt4 book ai didi

java - Mapstruct 生成的类使用父级而不是子级的 Lombok 构建器

转载 作者:行者123 更新时间:2023-11-30 05:24:32 24 4
gpt4 key购买 nike

我有类A(域类),类B(mongo db存储库层类)扩展A,并且它们都有Lombok @Builder。我需要在它们之间进行转换,当我为此使用 Mapstruct 时,实现转换类在生成类型 B 的对象时使用 A 中的 Builder。这会导致由于“不兼容类型”而导致构建失败。如何解决这个问题?

@Builder
class A {

}

@Document
@Builder
class B extends A{
}

@Mapper
public interface ClassMapper {
B mapToDocument(A domainObject);
}

此代码生成以下 Mapstruct 文件:

public class ClassMapperImpl implements ClassMapper{
@Override
public B mapToDocument(A domainObject){
if(domainObject == null){
return null;
}
Builder builder = A.builder();
//builder methods
return builder.build(); //incompatible types due to builder generating A objects, not B
}
}

最佳答案

即使没有映射器,您的代码也无法编译。 Lombok 提示 B 类中的 @Builder 返回了不兼容的类型:

The return type is incompatible with A.builder()

因为.builder()方法是静态的,所以不能使用继承机制。

另一个解决方案是在 A 类上使用 @Getter,在 B 类上使用 @Setter,并让 mapstruct 为您完成映射。

关于java - Mapstruct 生成的类使用父级而不是子级的 Lombok 构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58929524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com