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

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

progressOpt。如果存在(…) 采用java。util。作用消费者

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

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

或方法参考:

Consumer<Integer> consumer = model::setProgress;

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

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

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

  • 我已经注册了一名服务人员。到目前为止,我只显式缓存了非常少量的静态资源(一个样式表和几个图像)。当我转到ChromeDevTools的应用程序选项卡时,正如预期的那样,它们在缓存中。 让我困惑的是,在“网络”选项卡中,虽然有些东西说“来自磁盘缓存”(这是我所期望的),但除了缓存存储中的资源之外,很多资源都说“来自ServiceWorker”。服务工作者是否自动缓存某些东西?

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

  • 我真的很困惑值是如何传递给一个函数的。我无法弄清楚当我们把它传递给函数时,什么类型的值会被改变。 示例1-向函数传递字符串(引用类型)- 输出: 示例2-向函数传递String[]数组- 输出: null

  • 问题内容: 是否可以使用Java在Android中进行方法转换?我想拦截一个系统方法并记录其参数,然后正常处理 问题答案: 我认为在任何环境下都不能使用Java使用该技术。 也许您可以使用AOP获得类似的结果。 但是,您只能在Android上执行此操作。参见android中面向方面的编程。实际上,由于您不会编译目标代码(系统方法),因此在这种情况下,编译时编织(似乎是您可以在Android上使用的