2017-04-11 16 views
2

Java 8引入了處理NPE的可選項。在實際應用中,我無法理解一個問題。Optional.of(null)會拋出NPE,我需要在調用方法之前驗證null?

我有方法的

public void doSomethingA(String para) { 

     Optional<String> name = Optional.of(para); 
     if (name.isPresent()) { 
      //do 
     } 
    } 

但如果對= NULL,它會拋出NPE。

B法

public void doSomethingB(String para) { 

     if (para != null) { 
      //do 
     } 
    } 

如果我檢查對不爲空,什麼是哪裏是可選的意義A和B.

之間的差異。

+2

使用[Optional.ofNullable()](HTTPS ://docs.oracle.com/javase/8/docs/api/java/util/Optional.html#ofNullable-T-)而不是 – ymonad

回答

5

如果您不確定自己是否有價值,但不希望引發NullPointerException,則使用Optional.ofNullable

使用Optional.of如果你知道你有一個非空值,或者如果它適合你,如果一個NullPointerException否則拋出。

關於你的問題的其餘部分:爲什麼nullOptional您可能會發現以下問題有用:Optional vs. null. What is the purpose of Optional in Java 8?

你的問題也可能涉及到:Why use Optional.of over Optional.ofNullable?

+0

如果可以拋出NullPointerException,我需要使用它嗎? –

+1

這取決於你的用例。大多數時候我處理的是我無法控制的價值(他們來自遺留系統等),然後我使用'ofNullable'。如果我有對這些值的控制,我更喜歡''',因爲我希望看到'NullPointerException',如果有人試圖提供一個'null'值,我當然不期待。 – Roland

相關問題