【问题标题】:How to call a method with parameters from an optional object in java如何从java中的可选对象调用带有参数的方法
【发布时间】:2014-12-17 09:52:21
【问题描述】:

让我们考虑下面的类

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

假设我们有一个此类的可选对象,例如:

Optional<A> a;

是否可以在对象a 上调用方法met 而无需检查a 是指完整对象还是空对象(null)。比如:

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

很遗憾,这段代码无法编译。如何做到这一点?

【问题讨论】:

  • 当 a 为空时你期望会发生什么?
  • 方法不会被调用
  • 就好像这行代码a.map(A::met(5));不存在

标签: java java-8 optional


【解决方案1】:

这不起作用有两个原因:

a.map(A::met(5));
  1. met 什么也不返回,map 必须将输入 Optional 映射到输出 Optional
  2. 方法引用不带参数,因此您应该使用 lambda 表达式。

你需要的是:

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

另一种选择:

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

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

【讨论】:

  • @Anas 这只是一个类型为 A 的任意变量名称。这是一种引用 Optional 持有的实例的方法
  • 根据语义,后一个选项可以很好地与 Null Object 模式配合使用。
猜你喜欢
  • 1970-01-01
  • 2012-06-07
  • 2017-09-02
  • 2013-07-03
  • 2018-04-29
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 2012-05-29
相关资源
最近更新 更多