我目前正在使用一个 Java DTO 类(由其他人编写),该类有近 300 个字段,其中许多字段最终为空。我在代码库中看到的是很多空检查,最近我一直在使用
Optional.ofNullable
来解决这个问题(假设我来自函数背景)并发现它更容易使用。
但是,我希望避免在需要访问这些字段之一的任何地方都要记住这样做,并可能返回一种不同类型的对象,其中返回类型始终为
Optional<T>
。
有一篇类似的文章here关于Python中的问题,但我对Java中也可以完成的事情感兴趣。我当然可以接受它,或者自己生成一个带有可选吸气剂的单独的类,但如果有人有任何更聪明的方法或良好的设计模式可用于此类情况,我很感兴趣。
在我的例子中,当字段为空时,最常见的情况不是抛出异常,而是使用一些后备机制或默认值,这就是Optional类工作得很好的原因。
我终于有时间回来讨论这个问题,最后我做的是使用一些基本模板从原始类生成一个新类,返回
Optional<T>
get 方法,如下所示。
public class WithOptionalGettersClass {
private final class WithNullableGettersClass nullFields;
public WithOptionalGettersClass(WithNullableGettersClass nullFields) {
this.nullFields = nullFields;
}
public Optional<String> getName() {
return Optional.ofNullable(this.nullFields.getName());
}
public Optional<String> getComment() {
return Optional.ofNullable(this.nullFields.getComment());
}
public Optional<LocalDate> getDate() {
return Optional.ofNullable(this.nullFields.getDate());
}
// With many more such getOptionalXXX methods below
如果想更进一步,那么可以将带有可选吸气剂的新类的“自动生成”集成到相关的构建管道中。
我希望其他人觉得这很有用。