On this page
新特性
语法
Lambda
interface default method
API
CompletableFuture
Optional
Contents
Java EE 8
CompletableFuture
类似于 JS 中的 Promise
相当于 Guava 中的 SettableFuture, ListenableFuture
和 ExecutorCompletionService 也有些类似
很好的支持 Lambda
Java 8: CompletableFuture in action
缺点
CompletableFuture.allOf() 返回 CompletableFuture<Void>
将 Guava 中 settable 和 listenable future 的功能混合在了一起. complete() 方法可能错误的被用户端程序调用,导致程序异常.
API 数量过多.
如果分离 settable 和 listenable 的功能会解决很多问题.
vJUG24 Session on Optional
vJUG24 Session on Optional
Optional is intended to provide a limited mechanism for library method return types where there is a clear need to represent “no result,” and where using null for that is overwhelmingly likely to cause errors.
基本规则
不要使用 null 作为 Optional 变量或返回值
除非你能保证 Optional 值存在否则不要使用 Optional.get()
尽量选择或实现其他的接口来避免进行 Optional.isPresent() 或 Optional.get() 操作
避免通过使用 Optional 来获取一个值. Optional.ofNullable(x).orElse(y) -> x == null? y: x
如果 Optional 的内容还是一个 Optional, 那这就太过于复杂了
避免事项
记住 Optional 是一个封装, 每个 Optional 是个额外的对象会占用 16 字节的资源, 会创建更多的待被 gc 的对象
BUGS
JDK-8064803