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 クラス (そんなのがあるか知らんけど) に遠慮したのかな。

tags: java

Posted by NI-Lab. (@nilab)