Java 7 から java.util.Objects というユーティリティクラスが追加されたらしい。
Objects.equals メソッドを使えば、煩わしい null チェックをしなくても等しいかどうかチェックできるようになる。まったく知らんかった。
以下、サンプルコード。
$ cat ./Sample1.java
import java.util.Objects;
public class Sample1{
public static void main(String[] args){
test("a", "a");
test("a", "b");
test("a", null);
test(null, null);
test("1", 1);
}
private static void test(Object a, Object b){
boolean bool = Objects.equals(a, b);
String str = "Objects.equals(" + tos(a) + ", " + tos(b) + ") => " + bool;
System.out.println(str);
}
private static String tos(Object o){
if(o instanceof String){
return "\"" + o + "\"";
}else{
return "" + o;
}
}
}
$ java Sample1
Objects.equals("a", "a") => true
Objects.equals("a", "b") => false
Objects.equals("a", null) => false
Objects.equals(null, null) => true
Objects.equals("1", 1) => false
NullPointerException を避けるために if("定数".equals(変数)) で定数を先に持ってきて equals メソッド呼んだり、変数が null かどうか事前チェックしたりしてたところを、このユーティリティメソッド Objects.equals で置き換えられそう。
ただ、パッケージが java.util なんだよね。なんで標準で import される java.lang パッケージじゃないんだろうか。もしかして、既存のサードパーティ製 Objects クラス (そんなのがあるか知らんけど) に遠慮したのかな。
-
ref.
- Objects (Java Platform SE 7 )
- Java 7でオブジェクト同士を比較する時のnullチェックはユーティリティメソッドに任せられる - Steel Dragon 14106
- Java7のObjectsクラス - 地平線に行く
tags: java
Posted by NI-Lab. (@nilab)