Optional类是否应该更改它所拥有的对象的状态?或者每个返回流的中间操作都不应该改变对象的可变性? 例如:
Optional.ofNullable(repository.gePersonById(id))
.ifPresent(person -> person.setAge(25));
当它包含实例变量时,是否适用相同的原则。 E.g
Optional.ofNullable(this.person)
.ifPresent(person -> person.setAge(25));
答案 0 :(得分:2)
这是一个很好的问题!我认为答案是一个选择问题。我的答案是否定的。
可选的对象,来自docs:
容器对象,可能包含也可能不包含非null值。如果存在值,则isPresent()将返回true,get()将返回该值。
所以它不应该做的更多:)
但请查看Raoul-Gabriel Urma关于使用选项的文档:http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html
在这里,他使用了可选项,并在存在的情况下执行了某些操作
Optional<Soundcard> soundcard = ...;
soundcard.ifPresent(System.out::println);
就像你在第一段代码中那样。
但是使用Optional来检查实例变量似乎有点......很脏。
答案 1 :(得分:0)
考虑到在Stream
和Comparator
这样的api中记录语义约束需要多少注意,我会在Optional
中缺少这样的约束,因为默认允许你做任何事情想。它给出的唯一警告是避免计算同步或==等可选,因为它是一个不可变的值类型,许多操作,如filter
和map
创建新对象而不是修改现有的之一。