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

Optional是否应该更改其包含的对象的状态?

仲孙凡
2023-03-14

可选类应该改变它持有的对象的状态吗?或者每个返回流的中间操作都不应该改变对象的可变性?示例:

Optional.ofNullable(repository.gePersonById(id))
    .ifPresent(person -> person.setAge(25));

当包含实例变量时,是否应用相同的原则。例如

Optional.ofNullable(this.person)
    .ifPresent(person -> person.setAge(25));

共有2个答案

王锐
2023-03-14

考虑到在API中记录语义约束(如流式API和比较器API)需要多加小心,我将把在可选API中不存在此类约束视为可以做任何事情的默认权限。它给出的唯一警告是避免使用同步或==等选项,因为它是一种不可变的值类型,并且有许多操作,如筛选和映射,创建新对象,而不是修改现有对象。

毛博
2023-03-14

这是一个好问题!我认为答案是一个选择的问题。我的答案是不。

可选对象,来自文档:

一个容器对象,可能包含也可能不包含非空值。如果存在值,isPresent()将返回true,get()将返回该值。

因此,它真的不应该做更多的事情:)

但请查看Raoul Gabriel Urma关于使用Optionals的文档:http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html

在这里,他使用可选项,如果存在,则对其进行处理

Optional<Soundcard> soundcard = ...;
soundcard.ifPresent(System.out::println);

就像您在第一段代码中所做的那样。

但使用Optional检查实例变量似乎有点。。。肮脏的

 类似资料:
  • 问题内容: 在使用Optional对象时,是否有一种有效的方法来执行向上转换。这是一个示例代码: (2.)给出错误。我可以通过创建另一个函数来解决。 但是有没有一种有效的方法,使得func2()可以用于(1.)和(2.)? 问题答案: 我会写一个像这样的方法: (如果您不喜欢这个名字,请在下面查看我对番石榴的评论) 就运行速度而言,这是非常有效的:强制转换在编译时被忽略: 因此,唯一的成本就是方法

  • 我正在使用一个映射,并希望使用一个值对象作为映射键。。和一个列表作为值。值对象有两个属性:第一个名称、第二个名称。。我想把地图还给你。如果两个属性都与同一映射中的某个键匹配,则containsKey()为true。。 我尝试使用比较器如下 这是我正在使用的值对象 但它为我返回假...请帮助我...谢谢提前

  • 我有一段Java代码,它从可选#map的输入参数中包含的集合中删除一个元素 where项目。getDocId()返回一组字符串ID,并保证不为null。 我已经测试过它并有效;如果选项为空或docId不存在于集合中,ret为false。 但是,可选#map是否可以执行此操作并更改成员集的状态并返回Set#删除操作的布尔结果? 我到处找了找,找不到关于这件事的确切答案。

  • 我试图通过JS对象(1)来找出另一个对象(2)上是否存在值,并返回对象(2)的find值。 在这种情况下,我只能通过得到真/假来找出它是否存在,我也试过这个 但是在这种情况下,它只返回空数组,而不是对象(1)值找到的对象(2)值

  • 问题内容: 有没有办法在PHP中创建一个包含javascript 对象的JSON 对象?是否可以自动将PHP转换为Javascript ? 问题答案: 您可以将日期/时间作为UNIX时间戳传递,它是一个整数,是JSON本身支持的数据类型。PHP中的DateTime有一个“ getTimestamp()”函数,它将为您提供该值。

  • 问题内容: 我有一个带有按钮的应用程序,用于打开和关闭BT。我那里有以下代码; 我正在调用按钮Flip(翻转BT状态),然后调用ButtonText,后者应该更新UI。但是,我遇到的问题是,打开BT需要花费几秒钟的时间- 在这几秒钟中,BT状态未启用,即使我的按钮在2秒钟内打开,我的按钮也会关闭蓝牙。 我在BluetoothAdapter android文档中找到了该常量,但是…我只是不知道如何使