Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
Objects.equals() / Objects.toString() / Objects.requireNonNull()
『java.util.Objects』クラスは null を安全に扱うためのユーティリティメソッドを提供します。null チェックを伴う比較・文字列化・バリデーションを簡潔に記述できます(Java 7以降)。
構文
// null安全な等値比較を行います。 boolean result = Objects.equals(Object a, Object b); // null安全な文字列変換を行います。 String str = Objects.toString(Object o); String str = Objects.toString(Object o, String nullDefault); // 引数がnullの場合にNullPointerExceptionをスローします。 T value = Objects.requireNonNull(T obj); T value = Objects.requireNonNull(T obj, String message); // nullかどうかを確認します。 boolean isNull = Objects.isNull(Object obj); boolean nonNull = Objects.nonNull(Object obj); // null安全なハッシュコードを計算します。 int hash = Objects.hashCode(Object o); int hash = Objects.hash(Object... values);
メソッド一覧
| メソッド | 概要 |
|---|---|
| Objects.equals(a, b) | null を安全に比較します。両方 null なら true、片方だけ null なら false を返します。 |
| Objects.toString(o) | o が null の場合は "null" という文字列を返します。 |
| Objects.toString(o, nullDefault) | o が null の場合は nullDefault を返します。 |
| Objects.requireNonNull(obj) | obj が null なら NullPointerException をスローします。引数の事前チェックに使います。 |
| Objects.requireNonNull(obj, message) | 例外メッセージを指定できます。 |
| Objects.isNull(obj) | obj == null と等価です。メソッド参照(Objects::isNull)で使うと便利です。 |
| Objects.nonNull(obj) | obj != null と等価です。 |
| Objects.hash(values...) | 複数の値からハッシュコードを生成します。hashCode() の実装に使います。 |
サンプルコード
import java.util.Objects;
// equals() でnullを安全に比較します。
String a = null;
String b = "Hello";
System.out.println(Objects.equals(a, b)); // 『false』と出力されます。
System.out.println(Objects.equals(a, null)); // 『true』と出力されます。
// a.equals(b) はNullPointerExceptionになりますが、Objects.equals()は安全です。
// toString() でnullを文字列化します。
String name = null;
System.out.println(Objects.toString(name)); // 『null』と出力されます。
System.out.println(Objects.toString(name, "名無し")); // 『名無し』と出力されます。
// requireNonNull() で引数のバリデーションを行います。
class User {
private String name;
User(String name) {
this.name = Objects.requireNonNull(name, "nameはnullにできません。");
}
}
try {
User u = new User(null); // NullPointerExceptionがスローされます。
} catch (NullPointerException e) {
System.out.println(e.getMessage()); // 『nameはnullにできません。』と出力されます。
}
// hash() でhashCodeを実装します。
class Point {
int x, y;
Point(int x, int y) { this.x = x; this.y = y; }
@Override
public int hashCode() {
return Objects.hash(x, y); // 複数フィールドのハッシュコードを簡潔に計算します。
}
}
概要
『Objects.equals()』は null を安全に比較できるため、フィールドの equals() 実装でよく使われます。通常の a.equals(b) は a が null の場合に NullPointerException が発生しますが、Objects.equals(a, b) は安全に処理します。
『requireNonNull()』はコンストラクタや公開メソッドの引数検証に使い、null が入り込むべきでない箇所で早期にエラーを検出します。Java 9以降では Objects.requireNonNullElse(obj, defaultValue) で null の場合のデフォルト値を指定することもできます。
型確認には『getClass() / instanceof』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。