当前位置: 首页 > 知识库问答 >
问题:

Java可选的ifPresent成员方法

井唯
2023-03-14

我看到一段让我难以理解的代码,将其简化并放在这里:

...
Optional<Integer> progressOpt = Optional.ofNullable(progressOpt);
Model model = getModel();
progressOpt.ifPresent(model::setProgress);
...
Optional<Date> dateOpt = Optional.ofNullable(date);
dateOpt.ifPresent((dateStart)->model.setDate(dateStart)));
...

模型类被定义为具有公共方法:

@Entity
@DynamicInsert
@DynamicUpdate
@javax.persistence.Table(name = "model")
public class Model extends BaseEntity implements Serializable {
...
    public void setProgress(Integer progress) {
       m_progress = progress;
    }
    public void setsetDate(Date dateStart) {
       m_dateStart = dateStart;
    }
...
}

我的问题是:

  1. 对于progressOpt。ifPresent(型号:setProgress) 这是在调用成员方法并使用progressOpt中的值作为参数吗?看起来它正在使用非静态方法作为静态方法
  2. 对于dateOpt。ifPresent((日期开始)-

共有1个答案

薛宇
2023-03-14
匿名用户

进程Opt.if当前(...)需要java.util.function.消费者

在您的情况下,您可以使用lambda:

Consumer<Integer> consumer = i -> model.setProgress(i);

或方法参考:

Consumer<Integer> consumer = model::setProgress;

尽管他们的行为相同,但第二种方法可以说更清晰。但这只是一天结束时的偏好问题。

 类似资料:
  • 我看到一段让我难以理解的代码,将其简化并放在这里: 模型类被定义为具有公共方法: 我的问题是: 对于

  • 我知道你不能从返回,所以这个例子不起作用: 其中,可以返回有效字符串或空可选字符串。我所做的工作是: 这是更长的,并没有太大的不同,只是检查空值摆在首位。我觉得必须有一个更简洁的方式使用可选。

  • 我知道Optionals ifPresent()调用的目的是替换空检查。从Oracle文档中提取代码示例,它在简单情况下似乎非常有用。例如: 我只是想了解为什么这被认为比空检查更好。可读性?表演在我看来,这会对项目性能造成影响,因为必须引入一个新的对象才能容纳我们最终希望获得的对象?总之,为什么这是 如果(声卡!=null),则认为比这更好。

  • 声明成员方法可以定义类的行为,行为表示一个对象能够做的事情或者能够从一个对象取得的信息。类的各种功能操作都是用方法来实现的,属性只不过提供了相应的数据。 一个完整的方法通常包括方法名称、方法主体、方法参数和方法返回值类型,其结构如图 1 所示。 图 1  方法组成元素 成员方法一旦被定义,便可以在程序中多次调用,提高了编程效率。声明成员方法的语法格式如下: 注意:上述语法中,中括号“[]”中的部分

  • 问题内容: 我正在尝试做这样的事情: 这将不起作用,因为ifPresent将消费者功能接口作为参数,其具有无效的accept(T t)。它不能返回任何值。还有其他方法吗? 问题答案: 实际上,您正在搜索的是:Optional.map。您的代码将如下所示: 如果可以的话,我宁愿忽略通过。最后,您在这里不会获得任何收益。一个稍微不同的变体: 如果由于另一个调用而已经有了-object ,出于单一原因,

  • 我刚从Java7转到8,我的代码中到处都是代码片段,比如 我注意到,空检查有时被认为是一种反模式,而Java8提倡使用可选的。让我的代码看起来像这样有什么好处吗