2017-02-16 379 views
3

我最近看到一个blog posttweeted by @java)正变得越来越普遍:Optional.ofNullable(I).ifPresent ...... VS如果提出下面的代码(我!= NULL)

Optional.ofNullable(i).ifPresent(x -> doBlah(x)); 

代替的:

if (i != null) { 
    doBlah(i); 
} 

在这种情况下,使用可选显得非常尴尬的我,甚至忽略了变量的命名 - 后者是更易于阅读,更地道的使用情况(处理空值)。我相信这也能更好捕捉语义 - 我是从代码无法坚持到可选试图捕捉(如possible duplicatethis Oracle article描述)的语义可能。

我没有看到一个,但有一个良好的语义原因喜欢Optional.isNullable办法(忽略对性能的影响可能取决于如何使用它有)?

+1

'OrElse运算(X-> doBla(X))'是不正确的,除非'i'恰好是一个拉姆达。 – shmosel

+1

http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html – shmosel

+1

http://stackoverflow.com/documentation/java/152/optional – shmosel

回答

8

它不会使相同的代码单元多大意义包装一个潜在的空对象的可选只调用就可以了ifPresent()

更有用的情况下,是可以返回空对象,而不是返回一个可选的API。这迫使调用者以无效的方式处理潜在的空结果。由于API和调用者是独立的代码单元,因此将对象包装在Optional中并强制调用者调用ifPresent()的额外工作不仅仅是繁忙工作,而且实际上会强制执行一个更安全的契约来防止空指针异常。

+3

是的,的确,这是'Optional'被设计用来作为返回值的方式。 – erickson

相关问题