如果使用 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
我正在使用 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