2017-11-24 4 views
2

私のコードはDBからいくつかの設定値を読み込みます。それらが未定義の場合(getValueFromDBメソッドでnullを返す)、私はそれらをconfigファイルで定義された値にデフォルト設定したいと思います。nullをチェックしてデフォルト値を割り当てる場合は、Optional.ofNullableを使用してもかまいません。

任意のgetValueFromDB()がnullチェックを行い、nullの場合はデフォルト値を代入するためには、オプションの.Onlse()を使用しても問題ありません。 これはオプションの誤用/濫用ですか?

答えて

1

小さな虐待のようですが、私はそれについて強く感じません。多分、十分なプログラマーがこれをやり始めたら、それは受け入れられたイディオムになるでしょう。

しかし、あなたはOptionalを使用せずに同じことを行うことができます。

public static <T> T useValueOrDefault(T value, T defaultValue) { 
    return (value == null) ? defaultValue : value; 
} 

、代わりにOptional.ofNullable(value).orElse(default)のどこでも、このメソッドを使用します。 (注:をテストしていません)

私はJavaScriptで||やKotlinで?:のようなこれを実現することビルトイン構造を、見つけるのですか、便利です。あまりにも悪いJavaには同等のものがありません(@ HolgerのコメントによるとEDIT:、Java 9はこれを導入しました)。

+0

'?:'や '?'や '!'を使う他の言語のKotlinの選択にはほとんど賛成できません。あなたのコードが叫んでいるか、オプションのグループを常に使っているようです。 – Eugene

+0

しかし、私は 'C# 'がnullsとの関係で提案したようにソートしています... – Eugene

+0

' default'はキーワードです、私はそれを変更します –

3

まあ、私たちのコードベースでこの慣用句を使用してください。狂気のように - 私は何の問題も見ません。これは、Optionalが私にとって大切なことです - あなたは何らかの価値が存在するかどうかを判断する必要があります。私が絶対に愛しているのは、それがjava-8のように言語そのものを構築していることです。追加のメソッド(またはguavaのようなライブラリ)を導入する必要はありません。

あなたはここで、この単純なケースのために考えていますが、Optionalとしてウェル明らかチェーンの方法を持っているので、私にできることがあります

Optional.ofNullalbe(dbPass) 
     .map(// do mapping) 
     .filter(// do filtering) 
     .ifPresent(x -> // log it) 

あなたは簡単他の方法とそれを達成することはできません

関連する問題