【问题标题】:How to access private variable of super class by using lombok SuperBuilder如何使用 lombok SuperBuilder 访问超类的私有变量
【发布时间】:2021-06-08 03:52:25
【问题描述】:

我有两个类 Parent 和 Child,其中 Parent 和 Child 类有一个同名变量。

-> 父类

@Getter
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class Parent {
    private String parentA;
    private String parentB;
    private String parentC;
}

-> 子类


@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class Child extends  Parent {
    private String childA;
    private String parentB;  //variable name is same as Parent class
    private String childC;
}

现在在 Main 类中,我正在使用 builder 制作 Child 类对象。

public class Main {
    public static void main(String Args[]) {

        Child child = Child.builder()
                .parentA() 
                .parentB()  // Here it is setting Child class variable
                .parentC()
                .childA()
                .childC()
                .build();
    }
 }

现在我想设置父类的 parentB 变量。有什么方法可以设置吗?

【问题讨论】:

  • 为什么不用setter呢?
  • 由于父类和类具有相同的变量名parentB,Lombok setter注解将生成相同的函数名来设置变量(这里我不能编辑父类)

标签: java inheritance lombok


【解决方案1】:

@SuperBuilder 为注释类中定义的每个字段生成一个方法,但不为超类中的字段生成一个方法。相反,生成的构建器类extends 是超类的构建器类,因此来自超类的字段的方法继承自这些构建器。

如果ParentChild 中有两个完全相同的字段,则ChildBuilder 中的方法会简单地覆盖ParentBuilder 中的方法。无法再从ParentBuilder 调用该方法(除了一些丑陋的MethodHandle hack,你不应该这样做)。

备注:有两个相同的字段表示它们具有相似的含义。如果是这种情况,请创建一个 protected 并删除另一个。如果它们没有相同的含义,那么对它们进行同样的命名是一个非常糟糕的主意,即使您不使用@SuperBuilder,也几乎肯定会导致错误。

【讨论】:

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