当前位置: 首页 > 知识库问答 >
问题:

我可以使用Lombok@Builder传递父类作为参数吗?

闾丘晨
2023-03-14

不确定这件事可以完成,但我想创建一个新的子类,将父类和其他附加参数作为参数传递。

例如,如果我有:

public class Parent {
    public String param1;
    public String param2;
    // many parameters
    public String paramN;
}

public class Child extends Parent {
    public String subValue;
}

对于lombo,有没有一个构建器让我创建一个子类,将父类和缺少的值作为参数传递?

如果我能写出这样的东西会更容易:

Parent p = Parent.builder()
                 .param1("a")
                 .param2("b")
                 // many parameters
                 .paramN("b")
                 .build();
Child c = Child.builder(p).subValue("c").build();

共有1个答案

诸葛煜
2023-03-14

我建议您使用@superbuilder

@SuperBuilder是在lombok V1.18.2中作为实验特性引入的。@superbuilder注释为您的类生成复杂的构建器API。与@Builder不同,@SuperBuilder还处理超类中的字段。但是,它只对类型起作用。最重要的是,它要求所有超类也都有@superbuilder注释。

@Getter
@SuperBuilder
public class Parent {
    public String name;
    public String value;
}

@Getter
@SuperBuilder
public class Child extends Parent {
    public String subValue;
}

那你要做的就是

Child.builder().name("a").value("b").subValue("c").build();
 类似资料:
  • 问题内容: 在Java中,我可以做类似的事情 然后稍后在方法中“运行”代码。处理(匿名内部类)很痛苦,但是可以做到。 Go是否有可以促进函数/回调作为参数传递的内容? 问题答案: 是的,请考虑以下示例: 播放:http://play.golang.org/p/XNMtrDUDS0 导览:https : //tour.golang.org/moretypes/25(函数闭包)

  • 问题内容: 我有3类调用,和。 在我的课程中,我想要一个这样的方法: 因此,例如,我想: 如何将类名作为参数,并基于该类名从类名创建适当的对象? 问题答案: 使用反射是可能的。这里是给定的className(作为字符串传递)。此类将在内存中搜索(应该已经加载)。 作为字符串传递时要实例化的类的名称应 完全限定

  • 问题内容: 我希望能够创建如下功能: 这里的问题是,在方法中将其视为,因此是的单个参数,而我希望每个in 都作为新参数传递。由于也是带有可变参数的方法,因此应该可行。 如果这不可能,是否有类似的方法?在那种情况下,我可以先使用一个新数组,然后将其传递给该方法。 问题答案: 可变参数方法的基本类型 是 。Sun以这种方式添加了varargs,以保持向后兼容性。 所以,你应该只能够预先考虑到和呼叫。

  • 问题内容: 如果我将@Builder添加到类中。创建了builder方法。 我有一个需要特定字段的要求。在这种情况下,名称字段是必填字段,而不是姓氏。理想情况下,我想这样声明。 我不知道该怎么做。我尝试将@Builder添加到构造函数中,但没有成功。 问题答案: 您可以使用Lombok批注配置轻松完成此操作 然后像那样使用 当然这里是可选的。

  • 问题内容: 我想要与的关键字类似的语义。 问题答案: Java令人困惑,因为一切都是通过值传递的。但是,对于引用类型的参数(即不是原始类型的参数),引用本身是通过值传递的,因此它似乎是按引用传递的(人们常常声称它是)。情况并非如此,如下所示: 将打印到控制台。如果要打印上面的代码,Goodbye可以使用如下所示的显式引用:

  • 问题内容: 我试图衡量几种方法的执行时间。所以我在想做一个方法,而不是多次重复相同的代码。 这是我的代码: 假设我有,如何使用它来衡量执行时间? 问题答案: 方法不是Java中的一流对象,因此不能将它们作为参数传递。您可以将方法调用包装在扩展例如接口的匿名类中: