自定义龙目岛超级构建器

2023-12-22

我有一个父抽象类“Parent”和子类“Child”。我正在使用 @SuperBuilder 生成构建器 API。现在,我想对“Parent”和“Child”类的成员执行一些验证,作为构建的一部分。我找不到任何解决方案来自定义龙目岛超级构建器。按照lombok https://projectlombok.org/features/experimental/SuperBuilder博士,这似乎是可能的。有人可以解释一下吗?

@SuperBuilder
public abstract class Parent {
    int x;
    int y;
    int z;
    int a;
}

@SuperBuilder
public abstract class Child extends Parent {
    int b;
    int c;
    int d;

    // I want something like
    public static class ChildBuilder {

       public Child build() {
           Child child = // Get child somehow;
           validate(child);
       }
    }
}

生成的代码为@SuperBuilder很复杂并且加载了类型参数。因此,建议delombok您的班级并使用输出作为参考。

您可以使用以下命令执行此操作:

java -jar path/to/lombok.jar delombok -p path/to/src/main/java/Child.java

输出将显示 lombok 生成的代码。我假设Child类不是抽象的(我认为你的问题中有一个拼写错误)。您想要定制build()方法,所以您对ChildBuilderImpl,因为此类包含该方法。您可以将类标头复制到源文件并添加您的自定义build() method:

private static final class ChildBuilderImpl extends Child.ChildBuilder<Child, Child.ChildBuilderImpl> {
    @java.lang.Override
    public Child build() {
        // Do validation here, e.g.:
        if (((Child.ChildBuilder<?, ?>)this).b == 0)
            throw new IllegalArgumentException("b must not be 0");
        return new Child(this);
    }
}

备注:我更喜欢在构造函数中执行验证,因为否则您可以以编程方式调用构造函数,而无需验证值。然而,定制@SuperBuilder目前无法使用构造函数;下一个 lombok 版本将有可能实现。当这个问题发布时,我会更新它。

更新:从 Lombok v1.18.16 开始,您可以自定义构造函数。

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

自定义龙目岛超级构建器 的相关文章

随机推荐

  • PCL 中的 xamarin securestring 等效项

    SecureString 与 PCL 不友好 我知道这个问题可以使用依赖注入来解决 但我不想这样做 而是想在 PCL 中使用与 SecureString 等效的东西 但到目前为止我还找不到任何其他类或框架 System Security 几
  • protobuf-net 枚举序列化

    为了使用 protobuf net 序列化枚举 需要做什么 当序列化具有枚举属性的类时 我收到以下错误 如果从属性声明中删除 DataMember 属性 则它可以正常工作 System InvalidOperationException 仅
  • 仅使用互斥锁实现读/写锁?

    我试图仅使用互斥锁来实现读 写锁 仅供学习 正当我以为我已经涵盖了所有极端情况 因为程序可以处理各种组合 时 我意识到 我忽略了一个事实 因为它在 ubuntu 中工作 互斥体应该由线程的所有者释放 下面是我的实现 class rw loc
  • 突出显示组合框中的特定项目

    我有一个场景 我用模板名称填充组合框 在这些模板中 有一个是默认模板 我想在填充组合框时突出显示默认模板名称 以便用户知道其中哪一项是默认的 可以这样做吗 如果是的话怎么办 我正在使用 C 2 0 中的 Windows 窗体 这在一定程度上
  • MvvmCross Android - 按钮命令的relativesource绑定的替代方案

    I have a list of items bound to a MvxBindableListView with a MvxItemTemplate I usually have 4 items in my list bound to
  • 如何在 Rails 迁移中将列(包含内容)移动到另一个表?

    我需要将一些列从一个现有表移动到另一个表 如何使用 Rails 迁移来完成此操作 class AddPropertyToUser lt ActiveRecord Migration def self up add column users
  • 角度帖子json来表达

    我正在尝试将 json 发送到服务器节点 expressangular js 我的服务器 js Setup Dependencies var express require express Start Express var app exp
  • 使用 Pinterest SDK 发送到已释放实例的消息

    我正在使用 Pinterest iOS SDK 分享我的 iPad 应用程序中的项目 下面的代码片段总是会崩溃message sent to deallocated instance在评论线上 NSString clientId NSMut
  • 自动将 ipython 输出为 pdf

    我有一个小程序 基本上可以进行各种统计计算并打印结果和图表 目前 获得程序的良好 pdf 输出的一种便捷方法是使用魔术命令 matplotlib inline 在 Jupyter IPython Notebook 中运行我的代码 并通过执行
  • Java 正则表达式,具有积极的向后展望和消极的向前展望

    我正在尝试从这种字符串中提取ou persons ou dc company dc org最后一个字符串立即之前是 a coma 没有跟随 在最后一种情况下 这应该给出dc company dc org 从正则表达式来看 这似乎是消极展望背
  • 在 git add 中显示更多上下文

    例如 使用 git diff 我可以执行以下操作 以在显示差异时显示 10 条周围的上下文行 git diff U10 我可以用 git add patch 做类似的事情吗 理想情况下我想 git add p U10 但我没有找到这样的选项
  • 启用 WhiteNoise 时“collectstatic”命令失败

    我正在尝试通过以下方式提供静态文件白噪声 https github com evansd whitenoise blob master docs django rst as per Heroku https devcenter heroku
  • 获取新的 Apple 设备令牌?

    我正在创建一个应用程序 允许用户注销该应用程序并根据需要以其他用户身份登录 新用户登录后 有什么方法可以从 Apple 获取新的设备令牌吗 有没有办法强制调用didRegisterForRemoteNotificationsWithDevi
  • 确定网络连接带宽(速度)wifi和移动数据

    我想要获取以 kbps 或 mbps 为单位的网络连接带宽 如果设备连接到 WiFi 那么它应该返回网络带宽 速度 以及移动数据 它将返回 wifi 能力速率 但我想要精确的数据传输速率 public String getLinkRate
  • 更改 recyclerView 项目背景 onClick?

    当我按下我的按钮时我就会做到这一点recyclerView这会改变它的背景颜色 这样按下的时候就会可见 但我不太喜欢android 所以我不知道该怎么做 我尝试过在网上找到的一些指南 但其中大多数对我不起作用 就像这样guide https
  • 如何使用 nunit 和 moq 进行异常处理?

    我正在尝试使用 nunits 新的异常处理方式 但我发现很难找到有关它的信息以及如何将它与最小起订量一起使用 我现在有最小起订量 它在模拟方法上抛出异常 但我不知道如何使用 nunit 来捕获它并查看它 有几种不同的方法可以做到这一点 我使
  • `with_items` 输出太冗长

    我编写了一个 ansible 任务来迭代设置列表 使用with items 现在 当我运行 ansible 时 我的所有设置都会被记录 它非常冗长 让人很难看出发生了什么 但是 如果我禁用所有输出no log 当特定项目失败时 我将无法识别
  • 使用 React 构建 CRM Web 资源

    我是新的 Dynamics CRM 我的项目包括表单提交和验证 我计划使用带有 Redux 前端的 React 和 CRM 的服务来构建一个产品 构建 CRM Web 资源的 CRM 最佳实践是什么 有人可以指导我吗 https githu
  • 如何使用 Flask 和 Celery 定期运行函数?

    我有一个烧瓶应用程序 大致如下所示 app Flask name app route methods POST def foo data json loads request data do some stuff return OK 现在另
  • 自定义龙目岛超级构建器

    我有一个父抽象类 Parent 和子类 Child 我正在使用 SuperBuilder 生成构建器 API 现在 我想对 Parent 和 Child 类的成员执行一些验证 作为构建的一部分 我找不到任何解决方案来自定义龙目岛超级构建器