今日はさくっと終わりそうなことをやる。
目次とぶっつぶつテーマ
http://snoopopo.hatenablog.com/entry/2015/04/14/102732
今日のテーマ:requireNonNull
java7より登場した java.util.Objects クラスのメソッド。
public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; }
使ってみる。
try{ String s = null; s = Objects.requireNonNull(s); } catch(NullPointerException e) { e.printStackTrace(); }
速度のはなし
nullチェックの速度の話の記事が以前あがっていたので、一部分だけ自分でもやってみる。
既に上の記事にソースまで載せて頂いてたけど気づかなくて、自分で書いてたからださいコードになってるけど
public static void main(String[] args) { long start = System.currentTimeMillis(); String s = null; for(int i = 0; i < 100; i++){ try{ s = Objects.requireNonNull(s); } catch(NullPointerException e) { e.printStackTrace(); } } long end = System.currentTimeMillis(); long start2 = System.currentTimeMillis(); String s2 = null; for(int i = 0; i < 100; i++){ try{ if (null == s2) { throw new NullPointerException(); } } catch(NullPointerException e) { e.printStackTrace(); } } long end2 = System.currentTimeMillis(); long start3 = System.currentTimeMillis(); String s3 = null; for(int i = 0; i < 100; i++){ try{ s3.getClass(); } catch(NullPointerException e) { e.printStackTrace(); } } long end3 = System.currentTimeMillis(); long start4 = System.currentTimeMillis(); String s4 = null; for(int i = 0; i < 100; i++){ try{ s4.toString(); } catch(NullPointerException e) { e.printStackTrace(); } } long end4 = System.currentTimeMillis(); System.out.println("requireNonNull :" + (end - start)); System.out.println("if :" + (end2 - start2)); System.out.println("getClass :" + (end3 - start3)); System.out.println("toString :" + (end4 - start4)); }
これだと、null発生率100%のものしかみれていないことになるけど…
requireNonNull :11 if :7 getClass :8 toString :5
出力結果はこんなかんじでした。記事のとおり、null率100%の場合は、toStringが早い。
あと、単純にjavaのライブラリのもの使わなくて、自分で if(null == obj) を書いてることが多いので、 これも比べると、なんとなく早そうなんだけど…