【问题标题】:How to use Lombok @SuperBuilder with customized builder and several classes in hierarchy of heritance?如何将 Lombok @SuperBuilder 与自定义构建器和继承层次结构中的几个类一起使用?
【发布时间】:2021-05-22 10:26:54
【问题描述】:

我有这样的类层次结构:

@Data
@SuperBuilder
public abstract class Parent1 {
    Long id;
}
@Data
@SuperBuilder
public abstract class Parent2 extends Parent1 {
    String name;

    // Customized Lombok's builder
    public abstract static class Parent2Builder<C extends Parent2, B extends Parent2Builder<C, B>> {...}
}
@Data
@SuperBuilder
public class Child extends Parent2 {
    //some fields and methods
}

当 Parent1 和 Parent2 与 Lombok 的自定义构建器作为一个类(具有 2 个字段的父级)时,一切正常。但是我不得不将一个类分成两个不同的类,并在编译时出现下一个错误: Parent2.java:错误:方法没有覆盖或实现超类型@SuperBuilder中的方法

我不知道我没有实现哪个方法。

附:我在另一个包中也有相同的类层次结构(但没有自定义构建器),根本没有错误。

【问题讨论】:

  • 我不确定这是否是您正在寻找的解决方案,但如果我定义 public abstract static class Parent2Builder&lt;C extends Parent2, B extends Parent2Builder&lt;C, B&gt;&gt; extends Parent1.Parent1Builder&lt;C, B&gt; {...},它对我有用。 --- 备注:您可以添加@EqualsAndHashCode(callSuper = true) tot Parent2Child
  • 似乎这正是我正在寻找的解决方案 :) 我已将 extends Parent1.Parent1Builder {...} 添加到我的自定义构建器中,并且此解决方案有效。非常感谢
  • 在自定义@SuperBuilder 时,您应该真正使用delombok。 Eclipse 大纲中的 C&P 不起作用。由于大量使用泛型,类定义非常复杂,几乎不可能手动正确地得到它们。

标签: java lombok


【解决方案1】:

现在,Parent2.Parent2Builder 不再是 extends Parent1.Parent1Builder。如果我们改变

public abstract static class Parent2Builder
        <C extends Parent2, B extends Parent2Builder<C, B>> {
    ...
}

public abstract static class Parent2Builder
        <C extends Parent2, B extends Parent2Builder<C, B>> 
        extends Parent1.Parent1Builder<C, B> {
    ...
}

它按预期工作。

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多