让我们考虑以下课程
class A{
void met(int i){
//do somthing
}
}
让我们考虑一下这个类的可选对象,如:
Optional<A> a;
是否可以在对象met
上调用方法a
,而无需检查a
是指完整对象还是空(null
)。类似的东西:
a.map(A::met(5));
不幸的是这段代码无法编译。怎么办呢?
答案 0 :(得分:10)
这有两个原因可以解决这个问题:
a.map(A::met(5));
met
不返回任何内容,map
必须将输入Optional
映射到输出Optional
。您需要的是:
a.ifPresent(x->x.met(5));
另一种选择:
a.orElse(new A()).met(5);
如果met(5)
为空,这将在虚拟实例上执行a
,因此它可能不是最佳方式。