null判定やオブジェクト比較に便利! java.util.Objectsの便利なメソッド5選

こんにちは。いろんなユーティリティメソッドを使い倒したい堀部です。
 
今回はJavaでよく実装するnullチェックやオブジェクトの比較、String型への変換が楽になる、java.util.Objectsクラスを紹介したいと思います。
 
java.util.ObjectsはJava 7で新しく導入され、Java 8でさらにメソッドが追加された標準APIです。これを使うと毎回のように書いていたユーティリティメソッドを省略できるようになるかもしれません。

今回紹介するメソッドのまとめ

今回ご紹介するメソッドは、下記の5つです。java.util.Objectsの詳細はJavaDocをご覧ください。

メソッド名 引数 戻り値
equals・deepEquals Object a, Object b boolean
toString Object o, String nullDefault String
compare T a, T b, Comparator c int
isNull・nonNull Object obj boolean
requireNonNull T obj
T obj, String message
T obj, Supplier messageSupplier
<T>T

equals・deepEquals:オブジェクトを比較

equalsは2つの引数が等しいかを比較するメソッドです。引数がどちらもnullの場合もtrueとなります。
 
deepEqualsは配列などの要素に対して再帰的に比較が行えます。配列要素が全て等しい場合にtrueを返します。
 

if(Objects.equal(a, b)) {
    // 等価の場合の処理
}

if(Objects.deepEquals(new Object[] {a,b}, new Object[] {a,b})) {
    // 等価の場合の処理
}

toString:String型へ変換

toStringは引数に渡した値をString型に変換して返します。引数がnullであった場合、”null”という値が返されます。
 
nullの場合に返す値を変更したい場合は、2番目の引数に任意の文字列を指定します。
 

Object obj = null;
System.out.println(Objects.toString(obj));
System.out.println(Objects.toString(obj, "nullです。"));

compare:オブジェクトを比較

compareは1番目と2番目の引数を比較し、同じ場合は0を返します。異なる場合は3番目の引数に指定したComparatorでの比較結果を返します。
 

switch (Objects.compare(a, b, Comparator.naturalOrder())) {
    case 0:
        System.out.println("a は b と同じ");
        break;
    case -1:
        System.out.println("a は b より小さい");
        break;
    case 1:
        System.out.println("a は b より大きい");
        break;
}

isNull・nonNull:nullをチェック

isNullは引数がnullの場合にtrueを返します。nonNullは逆にnull以外の場合にtrueを返します。
 

if(Objects.isNull(obj)) {
    // nullの場合の処理
}

if(Objects.nonNull(obj)) {
    // null以外の場合の処理
}

requireNonNull:nullでないことをチェック

requireNonNullは引数がnullでないことをチェックします。nullの場合はNullPointerExceptionが発生します。2番目の引数を指定することでカスタマイズしたNullPointerExceptionを返すことができます。
 
NullPointerExceptionの発生にはコストがかかりますので、基本的にはnullにならない変数に対して使用するのが良いと思います。
 

this.obj = Objects.requireNonNull(obj);
this.obj = Objects.requireNonNull(obj, "nullです.");
this.obj = Objects.requireNonNull(obj, () -> "abc");

まとめ

いかがでしたでしょうか?
 
今回ご紹介したユーティリティメソッドはApache Commonsなどのライブラリにもありますが、標準APIにあるのであればこちらを積極的に使っていきたいですね。
 
サンプルの中で使用した、ComparatorやSupplierについても機会があればご紹介したいと思います。
 
 
 
 
≪関連記事≫

記事をシェア
MOST VIEWED ARTICLES