2016-12-13 8 views
4

確認し、入力はnullまたは "12"、 "14"などですJavaの8オプションナルは入力、出力が nullにするか、入力が文字列であれば、それは「ABCD」になることはありませんロング</p> <p>と仮定すると、入力に変換する必要があるnullの場合、私はチェックしようとしています

次のコードスニペットは、Java 8のオプションを正しく使用できないため、NULLポインタ例外をスローします。私はnullポインタの例外をキャッチするか、/ elseを3次の '?'オプションでこのシナリオを処理する方法はありますか?

public class OptionalClass { 

public void methodA(String input) { 
    System.out.println(Long.valueOf(Optional.ofNullable(input).orElse(null))); 
} 

public static void main(String[] args) { 
    new OptionalClass().methodA("12");// This works fine 
    new OptionalClass().methodA(null); // This throws null pointer exception 
} } 
+1

*なぜ*オプション*を使用しますか?私はあなたの事件のために何の使用も見ません。 – GurV

+3

それは本当に 'オプション'のためのものではありません。そしてあなたはNPEを捕まえたくありません。単により良いデザインが契約が単にnullを許可しないと言うことですが、第三を使用してください - その後、NPEを投げることは起こるはずのものであり、あなたのコードははるかに簡単です。 – pvg

+2

これは 'ternary'ですか? :-) IMOあなたのケースではオプションを使用する必要はありません。 'input!= nullのようなもの? Long.valueOf(入力):null'は大丈夫です。 @pvgの言うことも妥当です。 –

答えて

9

Optional<String>からOptional<Long>に変換するために使用map

Optional<String> str = ...; 
Optional<Long> num = str.map(Long::valueOf); 

strが空だった場合、numも空です。 strに値がある場合、numには、valueOfの結果が含まれます。これは、Optional<String>が他の場所から来ている場合に主に役立ちます。三元演算子を避けるようにすることは疑問ですが、方法を書き直す方法は次のとおりです。

public void methodA(String input) { 
    System.out.println(Optional.ofNullable(input).map(Long::valueOf).orElse(null)); 
} 
+0

これは参考になりました。これは、オプションでマップの使用をよりよく理解するのに役立ちました。上記のコードスニペットで言及したように、3進演算子はより良いオプションですが、答えはプロジェクトの他のシナリオ、つまりストリングからロングへの変換以外にも役立ちます。 – David

関連する問題

 関連する問題