使用公共字段使 lombok 构建器实现 2 类 的接口
Make lombok builder implement interface for 2 classes with common fields
假设我有一个接口和 2 个 class 是这样的:
public interface FinancialTransactionBuilder {
FinancialTransactionBuilder cost(int cost);
FinancialTransactionBuilder dateOfPurchase(Date date);
FinancialTransactionBuilder customer(Customer customer);
}
@Builder
public class ProductPurchaseInstance{
int cost;
Date dateOfPurchase;
Customer customer;
String productSerialNumber;
}
@Builder
public class ServicePurchaseInstance {
int cost;
Date dateOfPurchase;
Customer customer;
Service serviceSold;
}
因此 classes 有 3 个公共字段 cost
、dateOfPurchase
和 customer
,并且接口是这两个 classes可以实现。
有没有办法让我在 lombok @Builder
或 @SuperBuilder
注释中指定构建器正在实现一些接口方法?
在有人问“你为什么要这样做?”之前,这是因为我在一个代码库中工作,该代码库具有 2 个非常相似的模型,以及将数据附加到这 2 个 classes 的构建器的逻辑是非常复杂的重复代码。截至目前,我写出了所有样板生成器代码,以便制作一个使用接口附加数据的方法。但我想使用注释,这样样板就不必在数据模型更改时更新。
或者...我是否只需要创建一个抽象的父级 class 并具有公共字段并使用 @SuperBuilder
注释?
有;自己做建造者。 Lombok 将 'fill in' 自动:
@Builder
public class ServicePurchase {
int cost;
Date dateOfPurchase;
Customer customer;
Service serviceSold;
public static class ServicePurchaseBuilder implements FinancialTransactionBuilder {}
}
Lombok 仍会生成其他所有内容,因此您的构建器 class 的内容可以保持为空。
假设我有一个接口和 2 个 class 是这样的:
public interface FinancialTransactionBuilder {
FinancialTransactionBuilder cost(int cost);
FinancialTransactionBuilder dateOfPurchase(Date date);
FinancialTransactionBuilder customer(Customer customer);
}
@Builder
public class ProductPurchaseInstance{
int cost;
Date dateOfPurchase;
Customer customer;
String productSerialNumber;
}
@Builder
public class ServicePurchaseInstance {
int cost;
Date dateOfPurchase;
Customer customer;
Service serviceSold;
}
因此 classes 有 3 个公共字段 cost
、dateOfPurchase
和 customer
,并且接口是这两个 classes可以实现。
有没有办法让我在 lombok @Builder
或 @SuperBuilder
注释中指定构建器正在实现一些接口方法?
在有人问“你为什么要这样做?”之前,这是因为我在一个代码库中工作,该代码库具有 2 个非常相似的模型,以及将数据附加到这 2 个 classes 的构建器的逻辑是非常复杂的重复代码。截至目前,我写出了所有样板生成器代码,以便制作一个使用接口附加数据的方法。但我想使用注释,这样样板就不必在数据模型更改时更新。
或者...我是否只需要创建一个抽象的父级 class 并具有公共字段并使用 @SuperBuilder
注释?
有;自己做建造者。 Lombok 将 'fill in' 自动:
@Builder
public class ServicePurchase {
int cost;
Date dateOfPurchase;
Customer customer;
Service serviceSold;
public static class ServicePurchaseBuilder implements FinancialTransactionBuilder {}
}
Lombok 仍会生成其他所有内容,因此您的构建器 class 的内容可以保持为空。