我正在查看 Guava 的Optional类及其理由,我想知道在表示不能为 null 的值时是否有类似的快速失败的类会有所帮助。我找不到任何关于这个想法的讨论,所以我想我会在这里问。
我的第一次尝试是尝试保持 Guava 使用的风格,a Mandatory<T>
,暴露一个静态工厂of(T t)
。NullPointerException
如果使用 null 参数调用此方法,则抛出此方法。
我特别感兴趣的是在空处理方面确定接口方法的语义。我认为是否接受空参数是一个设计决策,应该在接口中指定,以便可以相应地设计客户端代码并避免重复前置条件检查逻辑。因此,使用此类的接口可能具有类似的方法
fire(Mandatory<Employee> employee);
客户可能会打电话
fire(Mandatory.of(unfortunateEmployee));
我怀疑 Mandatory 类型很容易找到,使用方面等在调用之前挂钩进一步检查,如果这样标记的方法参数不应该为空是绝对重要的。
我也考虑过基于注释的方法,fire(@NotNull Employee employee)
但是我看到的实现需要额外的验证器连接。
那么,问题......这个想法是否已经存在于任何地方?如果没有,我是否错过了一些明显破坏它的东西?还是实现这一目标的更好主意?