繁体   English   中英

在构造函数注释中使用 builder(lombok) 时出错

[英]Error while use builder(lombok) in constructor annotation

@Data
@Builder
public static class Common {
    private String common1;
    private String common2;
}

@Getter
public static class Special extends Common {
    private String special1;

    @Builder
    public Special(String common1, String common2, String special1) {
        super(common1, common2);
        this.special1 = special1;
    }
}

发生以下错误:

Error:(149, 9) java: builder() in com.example.home.ExampleDTO.Special cannot override builder() in com.example.home.ExampleDTO.Common   
return type com.example.home.ExampleDTO.Special.SpecialBuilder is not compatible with com.example.home.ExampleDTO.Common.CommonBuilder

当我把( builderMethodName = "b" )这个参数放在@Builder(Special constructor)它工作正常。

@Builder(builderMethodName = "b")
public Special(String common1, String common2, String special1) {

我不知道为什么第一个代码会出错。 请帮帮我。 谢谢

@Builder在两个类中都创建了一个静态方法builder() 它返回相应构建器的实例。 但是方法的返回类型不兼容,因为SpecialBuilderCommonBuilder是不同CommonBuilder相关的类: @Builder没有(并且技术上不能)考虑类之间的继承关系。 所以编译器抱怨两个方法同名,没有参数,但返回类型不同。 这在 Java 中是不可能的。

要解决这个问题,您有两个选择:

  1. 在两个类上使用@SuperBuilder @SuperBuilder旨在与继承一起使用。

  2. 正如您已经发现的那样,您可以在其中一个类中重命名该方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM