argius note

プログラミング関連

Java SE 7 (5) - java.langとjava.utilへの追加

主要なパッケージである、java.langとjava.utilの新規クラス/インタフェースと既存クラスの追加メソッドについて簡単にまとめます。
全部ではありません。

java.lang

AutoClosable(新規)
自動closeサポートのためのインタフェース。

"The try-with-resources Statement"(Java SE 7 (2) - リソース自動closeの仕組み参照)のために追加されたインタフェースです。このインタフェースを実装したクラスは、自動closeを利用できるようになります。

Throwable(メソッド追加)
throw可能なクラスのルートクラス。

addSuppressed,getSuppressedメソッドが追加されています。
これは、try文で例外"A"がthrowされた後でcatch-finallyの処理中に別の例外が発生した場合(典型的な例はCloseable#closeがIOExceptionをthrowする)、この例外を最初の例外"A"に「抑制された例外」として登録(addSuppressed)することができ、例外"A"のprintStackTraceでその情報を出力することが出来ます。
tryが入れ子になっていても複数の例外を次々に登録していくことができます。
これも"The try-with-resources Statement"(Java SE 7 (2) - リソース自動closeの仕組み参照)で使用されます。

// nio2.A#main
Exception e = new Exception("first");
e.addSuppressed(new Exception("second (suppressed)"));
e.addSuppressed(new Exception("third  (suppressed)"));
e.printStackTrace();
java.lang.Exception: first
	at nio2.A.main(A.java:14)
	Suppressed: java.lang.Exception: second (suppressed)
		at nio2.A.main(A.java:15)
	Suppressed: java.lang.Exception: third  (suppressed)
		at nio2.A.main(A.java:16)
Boolean/Char/Byte/Short/Integer/Long(メソッド追加)
プリミティブ型ラッパークラスの一部。

クラスメソッドcompareがそれぞれ追加されました。いずれかのクラスをCとして、

C.compare(x, y) == C.valueOf(x).compareTo(C.valueOf(y))

が成り立つように定義されています。
なお、Float,DoubleについてはJava1.4のときに追加されています。

Characterについては、Unicode6.0.0サポートによるメソッドの追加(計93個!)もあります。


java.util

Objects(新規)
Objectのユーティリティメソッドクラス。

すべてのクラスのスーパークラスであるObjectに関連するクラスメソッド集。
機能は大雑把に分けると以下の2種類になります。

  • NullPointerException回避:compare, equals, hashCode, requireNonNull, toString
    • インスタンスがnullでもnull判定コードをいちいち書かなくて済む。requireNonNullはインスタンスがnullならNullPointerExceptionがthrowされるので、そうでなければ戻り値はnullでないことが保証されるというもの。compareはComparatorがnullだと当然エラー。
  • メソッドオーバーライド支援:deepEquals, hash
    • Object#equals,Object#hashCodeをオーバーライドする際に有用。

たとえば、下記のコメント行のようなnullチェックを書かなくて済むようになります。

String s1 = ...;
String s2 = ...;
// boolean b1 = s1 != null && s1.equals(s2);
boolean b1 = Objects.equals(s1, s2);
Collections(メソッド追加)
コレクションのユーティリティメソッドクラス。

type-safeな空の反復子を返すメソッドemptyIterator,emptyListIterator,emptyEnumerationが追加されています。
実装は単にそれぞれのEMPTY定数をキャストしているだけですが、呼び出し側で@SuppressWarnings("unchecked")を書かなくて済みます。

DualPivotQuicksort(新規)
二重ピボットによるクイックソート

パッケージプライベートなユーティリティメソッドクラスで、仕様変更ではないけれどもこっそり改善されているAPI
Arrays#sortの内部で1.6以前に使用されていたソート実装は、このクラスの呼び出しに置き換えられています。