2

null 値を返す可能性のあるエイリアン メソッドを呼び出すことがよくあります。のような単純な null チェックを避けるために

if (myVariable != null) {
     // do something
}

次のように、デフォルト値を割り当てることがあります。

myVariable = (myVariable == null) ? defaultValue : myVariable;

たとえば、これはRubyでは少し冗長に思えます。||=演算子があります

私はそのような演算子を求めているわけではありませんが、三項演算子を使用した私の標準的なアプローチは少し冗長であるか、混乱しているように見えますか?

より良い方法はありますか?

4

6 に答える 6

4

これを試して:

if (myVariable == null) {
    myVariable = defaultValue;
}
于 2012-05-18T15:22:24.193 に答える
0

それを行うためのより良い方法が最終的にあります: OptionalJava 8.

Foo myVariable = bar();
myVariable = (myVariable == null) ? defaultValue : myVariable;

どこにbar()戻るかもしれませnullん、今あなたはします

Foo myVariable = Optional.ofNullable(bar()).orElse(defaultValue).get()
于 2016-01-29T06:02:42.690 に答える
0

デフォルト値の割り当てを小さなユーティリティ関数にラップして、ヘルパー クラスに入れることができます。type の変数の場合String、これは次のようになります。

public static String unNull(String val,String defVal) {
    return (val==null ? defVal : val);
}

次に、コードで次のように記述できます

myVariable = unNull(alienMethod(),defaultValue);

静的インポートを使用すると、静的メソッドの名前の前にクラス名を付けずに実行できます。

これを処理するジェネリック メソッドを作成することもできますが (両方の引数の型と戻り値の型をテンプレート化するため)、 type の追加パラメーターなしで機能するかどうかはわかりませんClass

于 2012-05-18T17:05:47.353 に答える
0

エイリアン メソッドが null 値を返す可能性がある場合は、メソッドの Java ドキュメントで null 戻り値について注意する必要があります。クライアントはそのエイリアンメソッドを使用して、戻り値をチェックする必要がありますが、決して方法はありません。

これを行う簡単な方法:

retVal = alienMethod();
if (retVal == null) {
    retVal = defaultVal;
}

それでもnull値のチェックを避けたい場合は、値を返すメソッドがデフォルト値を返す責任を負う必要があります。しかし、あなたのデフォルト値は何ですか?戻り値の型に応じて、null 値を返す代わりに、デフォルト値を表すダミー クラスを作成できます。

于 2012-05-18T15:26:14.423 に答える
0

それを行うためのより良い/より短い/より良い方法はありません....

「?」を導入する話がありました。Java 7 の null 値の演算子ですが、その概念はリリースから移行されました....おそらく Java 8 の場合は?

https://blogs.oracle.com/darcy/entry/project_coin_final_five

http://viralpatel.net/blogs/2009/10/null-safe-type-java-7-nullpointerexception.html

http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000047.html

于 2012-05-18T15:33:45.213 に答える
0

一般に、「エレガントな」方法はありません。変数がクラスのフィールドである場合は、setter または getter で実行できます。しかし、null に何が起こるかを説明するには、適切な javadoc (以下には示しません!) が重要です。例えば

   public void setFoo(Foo foo) {
      this.foo = foo != null ? foo : DEFAULT_FOO;
   }

   public Foo getFoo() {
      return foo != null ? foo : DEFAULT_FOO;
   }
于 2012-05-18T15:38:46.457 に答える