【发布时间】:2012-08-01 11:09:11
【问题描述】:
使用 Guava 的 Optional 类型作为方法参数的一个问题是您不能简单地编写
// method declaration
public void foo(Optional<String> arg);
// compiler error
foo(Optional.absent());
由于类型推断失败,而是必须显式添加类型:
// real method call
foo(Optional.<String> absent());
如何避免?
【问题讨论】:
-
实际上并没有更好的方法,但仅供参考,
Optional往往更常用作返回值而不是方法参数类型。 (忘记方法的返回值可能比您正在编写的方法的参数更容易忘记。) -
使用复杂的表达式,我使用适当类型的局部变量(在赋值的 RHS 上不需要类型变量)以获得更具可读性的内容。但在解决方案到来之前,这里什么都做不了(可能是 JDK8)。
-
@LouisWasserman 使用
Optional作为参数仍然有好处:1) 让 API 用户清楚地知道参数可以不存在; 2) 轻松将另一个方法的返回值传递给您的方法。 -
我将 Optional 与 Jersey 框架结合使用。例如。调用方法时可能未给出 @QueryParameter。但是,当我编写单元测试时,我需要使用键入的缺席 Optional 进行调用