如果使用 Lombok @Builder 进行初始化,则 Function 实现保持为 null

The Function implementation remains null if Lombok @Builder is used for initialization

我正在使用 Lombok 来初始化 class。 class 也定义了一些函数。从上面初始化的对象调用时,这些函数保持为空。

车辆测试Class:

public class VehicleTest {

public static void main(String...arg) {
    Vehicle vehicle = Vehicle.builder()
            .createdDateTime(DateUtil.getEpochTimeFromCurrentTimeZone())
            .make("Toyota")
            .year("2010")
            .model("Fortunner")
            .build();

    System.out.println(vehicle.convertEpochToString.apply(DateUtil.getEpochTimeFromCurrentTimeZone()));
    }
}

车辆Class:
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Vehicle {
 Long createdDateTime;
 String year;
 String make;
 String model;

 public String getTime() {
    return convertEpochToString.apply(createdDateTime);
}

 public Function<Long,String> convertEpochToString = epochTime -> {
    ZonedDateTime zonedDateTime = DateUtil.convertEpochToZonedDateTime(epochTime);
    return DateUtil.formatZonedDateTime(zonedDateTime,"dd-MMM-yyyy");
 };

}

如您在调试模式下所见,此 convertEpochToString 函数为空。

注意:这不是我在项目中使用的实际方式。这只是我用来描述我的问题的一个例子。
如本所述,如果我使用

@Builder.Default

在上面的函数中,这似乎有效。但是将它添加到每个 class 的所有 100 多个函数中对我来说将是一项艰巨的任务。除了上面的和static Function还有其他选择吗?

您可以通过在函数声明中添加修饰符 static 来解决这种情况。 但是我不确定这种行为的原因,我认为如果使用 class Lombok 代码生成可以做出决定,如果使用 class 和惰性函数的实例则不能。

通过

解决了这个问题

@Builder(toBuilder = true)

并从

修改初始化
Vehicle vehicle = Vehicle.builder()

Vehicle vehicle = new Vehicle().toBuilder()

这对我来说似乎很容易。

阅读自here