我一直在阅读有关在 java 中实现 null 安全的文章,以及作为参数return null
传递的 . null
我知道它简化了生活,而且人们并不总是阅读文档,所以他们不知道方法是否可以传递给它return null
,或者是否null
可以传递给它。注解似乎只是污染了代码,并且没有类似 Kotlin 的null 安全机制。在我当前的项目中,我尝试以这样的方式设计所有东西,null 几乎是不必要的,至少对于最终用户来说是这样。
我想创建一个更改侦听器(类似于javafx.beans.value.ChangeListener
),这样我就可以将以前的值和当前值传递给该changed()
方法。问题是,我希望它是空安全的,所以我不想将 anull
作为参数传递,即使它可以从无值变为某个值,或从某个值变为无值。我可以为这种情况添加两种额外的方法,并有类似的东西:
public inteface ChangeListener<T> {
void valueSet(T current);
void valueChanged(T previous, T current);
void valueCleared(T previous);
}
不过,这种做法似乎有些过分。我也可以
java.util.Optional<T>
用作参数,但这会增加额外的拳击:
public inteface ChangeListener<T> {
void changed(Optional<T> previous, Optional<T> current);
}
有没有更优雅的选择?或者我应该强迫用户使用某种空对象模式?尽管这会产生需要扩展某些类的问题。我也可以停止关心,在文档中指定如果使用会发生什么null
,并让用户找到所有 NullPointerExceptions 的来源。