渡されたオブジェクト参照がnull
の場合、Guavaはデフォルト値を取得するメソッドを提供しますか?私は<T> T nullToDefault(T obj, T default)
のようなものを探していますdefaultはobjはnull
です。
ここでstackoverflowで私はそれについて何も見つけませんでした。私は純粋なグアバソリューションを探しています(もしあれば)!
Gauva 10 APIには何も見つかりませんでしたが、com.google.common.base.Objects
は有望に見えますが、似たようなものが欠けています。
_Objects.firstNonNull
_に加えて、Guava 10.0では、このタイプの問題に対するより一般的な解決策として Optional クラスを追加しました。
Optional
は、値を含む場合と含まない場合があります。 Optional
インスタンスを作成するにはさまざまな方法がありますが、あなたの場合、ファクトリメソッドOptional.fromNullable(T)
が適切です。
Optional
を取得したら、or
メソッドのいずれかを使用して、Optional
に含まれる値(値を含む場合)または他の値(取得する場合)ではない)。
すべてをまとめると、簡単な例は次のようになります。
_T value = Optional.fromNullable(obj).or(defaultValue);
_
Optional
の柔軟性は、デフォルト値にSupplier
を使用する場合(したがって、必要な場合を除いてそれを取得するための計算を行わない場合)、または複数のチェーンを使用する場合存在する最初の値を取得するためのオプション値を一緒に、例えば:
_T value = someOptional.or(someOtherOptional).or(someDefault);
_
どう?
MoreObjects.firstNonNull(obj, default)
JavaDoc を参照してください。
(歴史上の注意:MoreObjects
クラスはObjects
と呼ばれていましたが、 Java.util.Objects
Java 7.で導入されたクラス。現在、Guava Objects
クラスは廃止されました。)
前述したように、グアバのソリューションは正しいです。
ただし、純粋なJDKソリューションとJava 8があります。
Optional.ofNullable( var ).orElse( defaultValue );
Java.util.Optional
のドキュメントを参照してください
これでうまくいくはずです:Objects.firstNonNull(o, default)
を参照してください guava API doc
オブジェクトがまだOptionalでない場合、Optional/firstNotNullの提案は、単純なJava機能、三項演算子:
T myVal = (val != null) ? val : defaultVal;
依存関係と複数のメソッド呼び出しを含めると、三項演算子と同じくらい読み取りが複雑になります。 「私のメソッドがオブジェクトを返す場合と返さない場合」のセマンティクスに反してOptional
を使用することは、何か間違ったことをしているという赤い旗であると主張することさえありますそのことの意味的意味)。
三項演算子の詳細については、 http://alvinalexander.com/Java/edu/pj/pj010018 を参照してください。
文字列についてのみ話している場合は、Apache CommonsのdefaultStringおよびdefaultIfEmptyメソッドもあります。
defaultStringはtrue nullのデフォルトのみを提供しますが、defaultIfEmptyはnullまたは空の文字列のデフォルトを提供します。
DefaultIfBlankもあり、空白文字列であってもデフォルトを提供します。
例えば.
String description = "";
description = StringUtils.defaultIfBlank(description, "Theodore");
説明は「セオドア」に等しくなります
編集:Apache Commonsには、完全にベイク処理されたオブジェクトに対してnullのデフォルトを行うObjectUtilsクラスもあります...
参考までに、Java 9には、希望どおりに行う2つのメソッドがあります。
public static <T> T requireNonNullElse(T obj, T defaultObj);
そして、怠zyなバージョン:
public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier)
Java.util.ObjectsとGuavaのオプションは、nullをデフォルト値にオーバーライドするための素晴らしい方法を提供します...それらを頻繁に使用しています
しかし、ここにもっと命令的な心のためのものがあります:
public static <T> T firstNotNuLL(T...args){
for (T arg : args)
if ( arg != null) return arg;
throw new NullPointerException();
}
Guava 10に組み込まれているOptional
の使用を検討してください。Optional.fromNullable(var).orNull()
やOptional.fromNullable(var).or(Optional.of(var2)).orNull()
など、複数のオプションをつなぎ合わせることができます。
ObjectUtils.defaultIfNull()
from org.Apache.commons.lang library:を使用できます。
public static <T> T defaultIfNull(T object, T defaultValue)