Java 8 可选是否应更改其包含的对象的状态?
类是否应该更改它所持有的对象的状态?或者每个返回流的中间操作都不应该改变对象的易变性? 例如: 当包含实例变量时,是否应用相同的原则。例如Java 8 可选是否应更改其包含的对象的状态?,java-8,Java 8,类是否应该更改它所持有的对象的状态?或者每个返回流的中间操作都不应该改变对象的易变性? 例如: 当包含实例变量时,是否应用相同的原则。例如 Optional.ofNullable(this.person) .ifPresent(person -> person.setAge(25)); 考虑到在API(如Stream和Comparator)中对文档语义约束的注意程度,我认为Optional中不存在此类约束是做任何事情的默认许可。它给出的唯一警告是避免使用synchronizati
Optional.ofNullable(this.person)
.ifPresent(person -> person.setAge(25));
考虑到在API(如
Stream
和Comparator
)中对文档语义约束的注意程度,我认为Optional
中不存在此类约束是做任何事情的默认许可。它给出的唯一警告是避免使用synchronization或==等选项,因为它是一种不可变的值类型,并且有许多操作,例如filter
和map
创建新对象,而不是修改现有对象。这是一个好问题!我认为答案是选择的问题。我的答案是否定的
可选文档的对象,来自文档:
可以包含或不包含非空值的容器对象。如果存在值,isPresent()将返回true,get()将返回该值
所以它不应该做更多的事情:)
但请查看Raoul Gabriel Urma关于使用选项的文档:
在这里,他使用可选项,并在出现时对其进行处理
Optional<Soundcard> soundcard = ...;
soundcard.ifPresent(System.out::println);
可选声卡=。。。;
声卡.ifPresent(System.out::println);
就像您在第一段代码中所做的那样
但是使用Optional检查实例变量似乎有点。。。脏。这让我的皮肤有点蠕动——所以我会说,凭直觉,不。我不知道为什么。我认为它可能是函数范例和可变状态的组合。
可选
并没有使对象不可变,它只是增加了缺席的选项。此外,ifPresent
没有没有没有副作用的用例,这使得它非常突出,例如map
或filter
。
Optional<Soundcard> soundcard = ...;
soundcard.ifPresent(System.out::println);