gpt4 book ai didi

java - 与 Guava 的Optional 一起,Mandatory 会是一个有用的补充吗?

转载 作者:行者123 更新时间:2023-12-01 07:27:55 24 4
gpt4 key购买 nike

我正在看Guava的Optional类和 its justification ,我想知道在表示不得为空的值时类似的快速失败类是否会有帮助。我找不到任何关于这个想法的讨论,所以我想我应该在这里问。

我的第一次尝试会尝试保持 Guava 使用的风格,a Mandatory<T> ,暴露静态工厂of(T t) 。此方法抛出 NullPointerException如果使用空参数调用。

我特别感兴趣的是确定接口(interface)方法在空处理方面的语义。我认为是否接受空参数是一个设计决策,应该在接口(interface)中指定,以便可以相应地设计客户端代码,并可以避免重复前置条件检查逻辑。因此,使用此类的接口(interface)可能具有类似

的方法

fire(Mandatory<Employee> employee);

客户可能会打电话

fire(Mandatory.of(unfortunateEmployee));

我怀疑,如果此类标记的方法参数不应该为空是绝对重要的,那么使用方面等在调用前进行进一步检查,可以很容易地找到强制类型。

我还考虑过基于注释的方法,例如 fire(@NotNull Employee employee)但我见过的实现需要额外的 validator 连接。

那么,问题是……这个想法是否已经存在于任何地方?如果不是,我是否错过了一些明显的破坏它的事情?或者有更好的主意来实现这一目标?

最佳答案

fire(Mandatory<Employee> employee);

如果您有带有此签名的方法,您仍然可以调用 fire(null) ;只是你会有一个 null类型 Mandatory<Employee>而不是输入 Employee 。实际上你根本没有提高安全性;您刚刚添加了多余的包装层。

如果您想强制要求参数是必需的,好的做法是使用例如Preconditions.checkNotNull作为方法中的第一件事,立即抛出 NullPointerException如果值为空。

关于java - 与 Guava 的Optional<T> 一起,Mandatory<T> 会是一个有用的补充吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21268392/

24 4 0