Optional.of()
がOptional.ofNullable()
上で使用する必要がありますなぜ私はhereを読んだが、答えはすべてで私を満たしていなかったので、私は少し異なる尋ねる:Optional.of()を使用する本当の理由はありますか?
あなたのメソッドがnull
を返さないことが確実な場合は、理由をすべきOptional
を使用していますか?私が知る限り、それは多かれ少なかれ、null
値を扱わなければならないかもしれないという、 "方法のユーザー"を思い出させることです。 null
の値を扱わなければならない場合、どうして彼はOptional
で悩まされるべきですか?
私は最近、私のサービスレイヤーがnullの代わりにOptionalsを返すようにしたので質問します(状況によっては)。私はOptional.of()
を使い、NullPointerを投げたときに非常に混乱しました。
私がやったことのサンプル:
Optional valueFromDB = getUserById("12");
User user = valueFromDB.get();
.....
public Optional<User> getUserById(String id) {
//...
return Optional.of(userRepository.findOne(id)); // NullPointerException!
}
ヌルができない場合は1がOptional
でそれをラップする理由、私は表示されません。リンクされた答えの男は、「うーん、もしNullPointerが起これば、すぐに起こる」と言った。しかし、私は本当にそれが欲しいですか? Optional
の唯一の目的が、そのようなオブジェクトを取得したプログラマに覚えておくために、null
を念頭に置いて(彼はそれをアンラップしなければならない)、なぜラップ時にNullPointerException
を持ちたいのですか?
編集:それは私はすでにリンクされていても、重複としてマークされてしまったので、私は、質問を編集するために必要な開始からの質問と述べました。私は答えがなぜ私を満足させなかったのか説明しましたが、私は今テキストを編集する必要があります。私は5件の回答を得たので しかし、ここでは、私がお聞きしたいものにいくつかの付録であると誰もが異なる場合に答えるが、どれも完全に私はここにお願いしてみてください何をカバーしていない:
は理由があり、それをOptional.of (null)は不可能で、nullの場合はOptional.ofNullable()を特別に追加しましたか?
ストリームの使用は私の実装の考え方では問題ではありません。 私はあなたの答えから多くの洞察を得ました。しかし、本当の疑問は今まで私が話す/読む/理解できる限り、答えられていない。 私は質問してください。「Optional.of()
メソッドを削除してJava 9でOptional.ofNullable()
しか許可しないと、後方互換性以外の問題はありますか?
「オプション」の唯一の目的は、結果がない可能性があることを明確に示すことです。適切に使用すると、 'null'チェックを行う必要はなく、' user.ifPresent(doAMethod()) 'を実行することも、' null '要素をチェックすることなく、ストリームや他のJDK8 APIで使用することもできます。したがって、適切に使用すると、コード内のヌルチェックの量を減らすことができます。 –
@MDeinum: 'ifPresent'は基本的にヌルチェックです。 :Pそれはちょうど良く見え、使いやすくなっています。私はストリームでものを得るが、それは質問自体とは関係がありません。私はOptionalalsについて質問しませんでした。もし 'Optional.of()'が役に立ちましたら質問しました。ごめんなさい。 – codepleb
あなたのメソッドがnullを返すことを意図していない場合、私はあなたが 'Optional'を返さないことに同意します。一方、あなたが返す予定の値がエラーによってnullであるかどうかを知りたいと思っています。私はそれのために良い古い 'assert'ステートメントを使用します。 –