如何使用java中可选对象的参数调用方法

时间:2014-12-17 09:52:22

标签: java java-8 optional

让我们考虑以下课程

class A{
    void met(int i){
       //do somthing
    }
}

让我们考虑一下这个类的可选对象,如:

Optional<A> a;

是否可以在对象met上调用方法a,而无需检查a是指完整对象还是空(null)。类似的东西:

a.map(A::met(5));

不幸的是这段代码无法编译。怎么办呢?

1 个答案:

答案 0 :(得分:10)

这有两个原因可以解决这个问题:

a.map(A::met(5));
  1. met不返回任何内容,map必须将输入Optional映射到输出Optional
  2. 方法引用不接受参数,因此您应该使用lambda表达式。
  3. 您需要的是:

    a.ifPresent(x->x.met(5));
    

    另一种选择:

    a.orElse(new A()).met(5);
    

    如果met(5)为空,这将在虚拟实例上执行a,因此它可能不是最佳方式。