如何在具有最终字段的抽象类上使用 Lombok @SuperBuilder

2024-02-21

给定以下带有 Lombok 注释的类@Data and @SuperBuilder

@Data
@SuperBuilder
public abstract class Parent {

    protected final String userId;
    protected final Instant requestingTime;
}

@Data
@SuperBuilder
public class Child extends Parent {

    private final Instant beginningDate;
    private final Instant endingDate;
    private final Collection<String> fields;
}

我收到以下错误@Data中的注释Child class:

隐式超级构造函数 Parent() 未定义。必须显式调用另一个构造函数。

有没有办法在上配置非默认构造函数Child班级的@Data注释以便拥有所有final两个字段Child and Parent调用 Builder 时初始化的类?

我尝试了几种不同的组合@Data, @Getter, @Setter注释与@SuperBuilder对子类和父类都进行了注释,但尚未找到可行的解决方案。我正在使用龙目岛 1.18.10。

以供参考,this https://stackoverflow.com/questions/51208842/how-to-implements-lombok-builder-for-abstract-class问题是相关的

EDIT

这实际上是 Lombok 应该构建并调用的构造函数SuperBuilder.build()手术。

public Child(
    final String userId,
    final Instant requestingTime,
    final Instant beginningDate,
    final Instant endingDate,
    final Collection<String> fields) {

    super(userId, requestingTime);
    this.beginningDate = beginningDate;
    this.endingDate = endingDate;
    this.fields= fields;
}

根据要求,这就是我期望调用构建器的方式Child object.

final Child child = Child.Builder()
                         .userId(<value>)
                         .requestingTime(<value>)
                         .beginningDate(<value>)
                         .endingDate(<value>)
                         .fields(<value>)
                         .build();

AFAIK, @Data生成一个@NoArgsConstructor,这是错误的。实际上,@Data本身是错误的,因为它适用于可变类;@Value会更好,但它也不能处理超级构造函数。

所以删除@Data, add @Getter, @EqualsAndHashCode, @ToString以及您需要的任何东西。别忘了添加callSuper=true在子类中。


这实际上是 Lombok 应该在 SuperBuilder.build() 操作上构建和调用的构造函数。

public Child(
    final String userId,
    final Instant requestingTime,
    final Instant beginningDate,
    final Instant endingDate,
    final Collection<String> fields) {

    super(userId, requestingTime);
    this.beginningDate = beginningDate;
    this.endingDate = endingDate;
    this.fields= fields;
}

不,不是这样的SuperBuilder作品。这实际上是 Lombok 无法做到的,因为它看不到超级字段。相反,构建器使用类似的东西

public Child(ChildBuilder b) {    
    super(b);
    this.beginningDate = b.beginningDate;
    this.endingDate = b.endingDate;
    this.fields= b.fields;
}

你可以相信 Jan Rieke 说的话,他写的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在具有最终字段的抽象类上使用 Lombok @SuperBuilder 的相关文章

  • 三层 Asp.Net 应用程序中的异常处理

    1 据我了解 在three tierAsp Net应用程序我们应该通过以下方式实现异常处理 a 我们应该把try catch围绕代码块 位于三层中的任何一层 我们希望页面能够从该代码块正常恢复 当此代码生成异常时 b 我们不应该放try c
  • 在 Java/Android 中检查字符串是否包含 URL 的最佳方法是什么?

    在 Java Android 中检查字符串是否包含 URL 的最佳方法是什么 最好的方法是检查字符串是否包含 com net org info 其他 或者有更好的方法吗 url 输入到 Android 中的 EditText 中 它可以是粘
  • 如何在 Spring 5 MVC 中将 FilePart 转换为 byte[]

    我有从网络表单接收和上传文件的控制器方法 如何从 FilePart 中提取字节数组并将其保存到数据库 我可以通过使用 FilePart transferTo 将 FilePart 保存到文件中来完成此操作 但这看起来又慢又难看 有更好的方法
  • 在tomcat中显示Spring-security的SQL错误

    我使用 spring security 框架创建了一个 Web 应用程序 我设置了一个数据库来存储用户及其角色 但 tomcat 给出以下错误 17 sep 2010 11 56 14 org springframework beans f
  • 如何将 Excel 中的图表导出为图形

    我有一系列 Excel 电子表格 每个电子表格至少包含一页数据和一页根据数据创建的图表 我需要捕获 不从数据中重新生成 将现有图表作为网络友好图像 这可以通过 Java 或 Net 实现吗 我知道 POI 的东西 Java 不会这样做 或者
  • 如何使 java.text.NumberFormat 将 0.0d 格式设置为“0”而不是“+0”?

    需要带符号的结果 0 0d 除外 IE 123 45d gt 123 45 123 45d gt 123 45 0 0d gt 0 我调用format setPositivePrefix 在 DecimalFormat 的实例上 强制结果中
  • 如何在 Java 中用 \n 替换 \\n

    我有一个string test first n middle n last 现在我想更换所有 n by n 我试过了test replaceAll n n and test replaceAll n n 但它们不起作用 有人有解决办法吗 T
  • Java SWT 用户输入验证

    在 SWT 中进行用户输入验证时 Java 约定是什么 我读到有 FieldEditors 它们是非常方便的字段 但遗憾的是仅适用于首选项和对话框 我还了解到有一个 IValidator 接口 但它经常与数据绑定一起使用 就我而言 我的大多
  • Android 3.1 USB 主机 - BroadcastReceiver 未收到 USB_DEVICE_ATTACHED

    我经历过USB 主机的描述和示例位于developer android com http developer android com guide topics usb host html检测连接和分离的 USB 设备 如果我在清单文件中使用
  • Spring Data (JPA) 多个存储库,没有很多类

    在我当前的项目中 我使用 Spring Data JPA 并且有 20 多个 Entity类 我想为它们创建存储库 但创建另一个类 每个类适用于任何模型 Repository注释似乎是某种矫枉过正和大量 重复 代码 所有存储库类将如下所示
  • 飞碟中的外部 CSS

    我想知道如何在 Flying Saucer 中包含外部 CSS 在此之前THB我检查了所有可用的链接StackOverflow但它们没有帮助 这就是为什么我自己做这个的原因 TestCSS xhtml重命名版本TestCSS html 所以
  • 具有多个注释的方法上的 AspectJ 切入点

    使用加载时编织 纯 AspectJ 我们有2个注释 Time and Count 以及一些带注释的方法 Time name myMethod1Time Count name myMethod1Count public void myMeth
  • Spring Oauth2. DaoAuthenticationProvider 中未设置密码编码器

    我对 Spring Oauth 和 Spring Security 很陌生 我正在尝试在我的项目中使用 client credentials 流程 现在 我设法使用自己的 CustomDetailsS ervice 来从系统中已存在的数据库
  • java.lang.OutOfMemoryError:尝试将 Java 对象转换为 Json 字符串时的 Java 堆空间

    我尝试将 csv 文件转换为 200K 对象的 Json 文件 其中对象代表 csv 中的 1 行 我在 32 位上安装了 Java 并且项目配置 VM 参数 Xmx1024m 但是我得到 Exception in thread main
  • 如何通过sparkSession向worker提交多个jar?

    我使用的是火花2 2 0 下面是我在 Spark 上使用的 java 代码片段 SparkSession spark SparkSession builder appName MySQL Connection master spark ip
  • JAXB 枚举字段未序列化

    我有以下课程 package dictionary import java io Serializable import java util Objects import javax xml bind annotation XmlEleme
  • 如何在 Android 上设置 Google Drive API?

    我一直在尝试将 Google Drive 功能集成到我的应用程序中 但我无法使用任何内置功能 因此我相信我要么错过了一个步骤 要么做得不正确 我正在遵循官方的 Google 开发者指南 https developers google com
  • Java:将秒转换为分钟、小时和天[重复]

    这个问题在这里已经有答案了 任务是 输出应如下所示 最好回显输入 您输入了 500 000 秒 即 5 天 18 小时 53 分钟 20 秒 5天18 53 20小时 我该怎么做呢 最容易理解和做到的方法是什么 讲师还说 没有硬编码 我不太
  • Android,Volley请求,响应阻塞主线程

    使用 Volley 处理较大响应时会发生一些不好的事情 String url AppHelper DOMAIN service pages profile update json this infoTextView setText getS
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir

随机推荐

  • 找不到“UIView”的接口声明

    我正在尝试添加一个目标 C祝酒图书馆 https github com scalessec Toast到我的 xcode 项目 但我收到了一些这样的错误 Cannot find interface declaration for UIVie
  • msiexec.exe - 嵌入

    我正在使用基于云的 EDR 平台来监控客户端受感染网络上发生的进程 我最近经常看到的是使用选项 Embedding 调用 msiexec exe C Windows System32 MsiExec exe Embedding 35507F
  • 当连续输入错误时,循环中断java

    当您连续两次输入随机值 例如 i 时 程序将终止 我希望 无效数据 请重试 和 您想再玩一次吗 不断重复 直到输入 N 或 Y 7 8 5 No numbers match Do you want to play again i Inval
  • 除法不返回我期望的十进制值[重复]

    这个问题在这里已经有答案了 可能的重复 这个部门有什么问题吗 https stackoverflow com questions 704702 whats wrong with this division 如果你分2 3 它应该返回0 66
  • 适用于 OSX 和 Windows 应用程序的 Eclipse info.plist 文件

    当我寻找隐藏 Java 应用程序停靠图标的方法时 我到处都看到info plist 文件这个 and info plist 文件表示 但我没有看到一个 我的问题是如何在 eclipse 中生成 info plist 文件 它属于哪里 当我导
  • 如何在 iPhone 的导航栏中添加右栏按钮

    我想在导航栏中添加一个右栏按钮项目 以便单击时执行某些功能 我创建了以下代码来添加右侧栏按钮项目 但完成后 栏按钮项目没有显示在导航栏中 void viewDidload self navigationItem rightBarButton
  • 从文件夹中的图像序列获取 numpy 数组

    我有一个文件夹 比如说video1一堆按顺序排列的图像frame 00 png frame 01 png 我想要的是格式为 4D numpy 数组 number of frames w h 3 这就是我所做的 但我认为它很慢 有没有更快或更
  • 在哪里可以找到图形命令 shell?

    终端和 shell 非常强大 但学习起来可能很复杂 尤其是要充分利用它们 有谁知道有一个更加基于 GUI 的命令 shell 可以帮助用户或以更友好的方式显示答案 我知道 IPython 但即使它的语法也有点复杂 尽管这是朝着正确方向迈出的
  • 将片段从 GraphQL 文件导入到另一个 GraphQL 文件不起作用

    我正在尝试使用 graphql 文件并传递变量来对空手道进行测试 在我的 graphql 模式上 我试图重用另一个 graphql 文件中的片段 我尝试按照以下说明进行操作https www apollographql com docs r
  • 为什么GetType成功时FindType却获取不到RTTI?

    我正在尝试使用来抓住一个物体TRttiContext FindType QualifiedTypeName 这是我所得到的 program MissingRTTI APPTYPE CONSOLE uses System SysUtils R
  • 我无法让 super() 在 python 2.7 中工作

    通过一对简单的课程 我无法获得超级工作 class A object q foo class B A q bar def init self self a super A self q a B 像这样的错误 AttributeError T
  • Play框架2.4:NoClassDefFoundError:play/api/cache/CachePlugin

    在尝试从 Play 2 2 更新到 Play 2 4 时 我遇到了这个绊脚石 我还添加了 memcached2 插件 但已禁用 我的conf文件 Cache configuration To avoid conflict with play
  • 在 Socket.IO 客户端断开连接时释放事件处理程序

    我正在使用 Socket IO 如本示例所示 io sockets on connection function socket myService on myevent function socket emit myevent some s
  • Spyder - python - 安装外部包

    我刚刚开始使用 python 在 Windows 中 64 位 我有一个关于如何在 anaconda spyder 环境中安装外部包的基本问题 据我所知 对于大多数软件包 可以简单地使用 conda install bunnys 但是 某些
  • 检查tomcat是否运行? [复制]

    这个问题在这里已经有答案了 可能的重复 Tomcat 正在运行吗 https stackoverflow com questions 3944157 is tomcat running hi 我在虚拟机中安装了tomcat服务器 我想每天检
  • Python Tensorflow - 多次运行 model.fit 而不重新实例化模型

    背景 我正在看一个热门 YouTube 速成课程 https youtu be tPYj3fFJGjk t 12950关于机器学习 At 3 35 50 https youtu be tPYj3fFJGjk t 12950 他提到该模型可能
  • 在 awk 中打印其余字段

    假设我们有这个数据文件 john 32 maketing executive jack 41 chief technical officer jim 27 developer dela 33 assistant risk managemen
  • Windows 工作组上的 Microsoft 服务总线

    我刚刚开始使用 Microsoft Service Bus 现在 我个人面临的挑战是 我是在下班后 在自己的时间等进行此操作 这意味着我正在使用虚拟机和非域电脑 这些人都是工作组 我取得了相当大的成功 特别是在我偶然发现这个链接之后 Mic
  • 启动屏幕等待线程完成

    我仍然遇到闪屏问题 我不想使用该房产SC TopMost true 现在我的应用场景如下 在程序 cs中 STAThread static void Main new SplashScreen tempAL where tempAL is
  • 如何在具有最终字段的抽象类上使用 Lombok @SuperBuilder

    给定以下带有 Lombok 注释的类 Data and SuperBuilder Data SuperBuilder public abstract class Parent protected final String userId pr