tar*_*sbl 6 java optional java-8
Java 8为什么没有Optional实现Iterable?
我认为这是故意的语言选择,但我想知道为什么。Scala Option和Haskell的Maybe实现遍历方法类似于Iterable。FWIW,Java 9将实现Optional.stream()(JDK-8050820)。
我不是Scala或Haskell的专家,但我相信这些语言具有诸如序列理解之类的构造,这些构造使它成为Option或Maybe成为有用Traversable。
可能是Java Iterable类似于Java ,Traversable但Java语言的其余部分并未为其提供太多支持。IterableJava 唯一要做的就是在增强的for(“ for each”)循环中启用它。例如,考虑是否Optional要实现Java Iterable。这样就可以Optional像这样使用:
Optional<T> opt = ... ;
for (T t : opt) {
doSomethingWith(t);
}
Run Code Online (Sandbox Code Playgroud)
将其写为循环是一种误导,因为它执行零次或一次。为了减少误导,不妨这样写:
if (opt.isPresent()) {
doSomethingWith(opt.get());
}
Run Code Online (Sandbox Code Playgroud)
或最好
opt.ifPresent(this::doSomething);
Run Code Online (Sandbox Code Playgroud)
我不知道一个事实,之所以Optional没有做Iterable。Java 8 lambda专家组举行了几次面对面的会议,可能讨论了很多事情,而且从未写下过很多东西。我很容易想象这个主题是在这样的会议上提出的,并且由于存在诸如这样的更有用的替代方案而被认为不是很有用ifPresent。
| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |