使 lombok 构建器实现 2 个具有公共字段的类的接口

Ali*_*zan 1 java lombok intellij-lombok-plugin

假设我有一个接口和两个类,如下所示:

public interface FinancialTransactionBuilder {
    FinancialTransactionBuilder cost(int cost);
    FinancialTransactionBuilder dateOfPurchase(Date date);
    FinancialTransactionBuilder customer(Customer customer);
}
Run Code Online (Sandbox Code Playgroud)
@Builder 
public class ProductPurchaseInstance{
    int cost;
    Date dateOfPurchase;
    Customer customer;
    String productSerialNumber;
}
Run Code Online (Sandbox Code Playgroud)
@Builder 
public class ServicePurchaseInstance {
    int cost;
    Date dateOfPurchase;
    Customer customer;
    Service serviceSold;
}
Run Code Online (Sandbox Code Playgroud)

因此,这些类有 3 个公共字段costdateOfPurchase、 和customer,并且接口是这两个类的构建者都可以实现的。

有没有办法让我在 lombok@Builder@SuperBuilder注释中指定构建器正在实现某些接口方法?

在有人问“你为什么要这样做?”之前,这是因为我正在使用两个非常相似的模型的代码库,并且将数据附加到这两个类的构建器的逻辑是非常复杂的重复代码。到目前为止,我写出了所有样板构建器代码,以便创建一个使用该接口附加数据的单一方法。但我想使用注释,以便在数据模型发生变化时不必更新样板。

或者...我是否只需要创建一个具有公共字段并使用@SuperBuilder注释的抽象父类?

rzw*_*oot 5

有; 自己制作建造者。Lombok 将自动“填写”:

@Builder
public class ServicePurchase {
    int cost;
    Date dateOfPurchase;
    Customer customer;
    Service serviceSold;

    public static class ServicePurchaseBuilder implements FinancialTransactionBuilder {}
}
Run Code Online (Sandbox Code Playgroud)

Lombok 仍然会生成其他所有内容,因此您的构建器类的内容可以保持为空。