J2SE 5.0

(1)ジェネリック型
ジェネリック型とは、Javaコード上の「型名」をパラメータ化し、
コンパイル時に任意の型名で置き換えるメカニズムである。

コレクションにはあらゆるオブジェクトを格納できる。
なぜならコレクションに要素を追加するaddメソッドの引数や、
Iteratorからオブジェクトを取り出すnextメソッドの戻り値が、
いずれも「Object型」として定義されているからだ。
だが使用する際にキャストが必要だったり、
型チェックが行われないためにClassCastExceptionが発生したいする問題がある。
こうした問題を解決するのがジェネリック型である。
J2SE 5.0では以下のようなコードが書けるようになった。

List<String> list = new LinkedList<String>();
list.add("Hello,");
list.add("World!");

for (Iterator<String> it = list.iterator(); it.hasNext();) {
   String msg = it.next();
   System.out.println(msg);
}


(2)新しい「forループ」
コレクションを逐次処理するループをとても簡単に記述できるようになった。
この新しいforループを使えば、上記コード例のforループ部分は以下のように記述できる。
   for (String msg : list) {
       System.out.println(msg);
   }

 これはつまり、「コレクションからIteratorを取得する」
 「Iteratorに要素が残っているか調べる」
 「Iteratorから次の要素を取得する」という一連の処理のコーディングをすべて省略できる。

(3)プリミティブ型を自動変換する「オートボクシング」
オートボクシングは、intやdoubleなどのプリミティブ型とIntegerやDoubleなどのラッパクラス間の相互変換を自動化する機能だ。
例えば以下のようなコードを書けるようになる。
List list = new LinkedList();
list.add(123);

 従来、2行目の部分は「list.add(new Integer(123));」と記述していた。
 コレクションはプリミティブ型のデータを格納できないので、
 Integerオブジェクトでラップしなくてはならないからだ。
 一方J2SE 5.0では、上記のようなコード部分で必要に応じてオートボクシングが働くため、
 ラッパクラスに変換するコードを書く手間が掛からない。


(4)「メタデータ」でアノテーションが可能に
 Javaコード上にさまざまなアノテーション(注釈)を記述するための仕組みが追加された。
 このアノテーションを使えば、Javaコードだけでは伝え切れない付加的な情報をコンパイラや開発ツールに伝達できる。
 コンパイラによるコードのチェックをはじめ、コードやドキュメント自動生成、DI(Dependency Injection)などに応用が可能だ。

 最も分かりやすい例が@Overrideアノテーションである。
@Override
public String toString() {
   ...
}

 @Overrideアノテーションを記述しておけば、確実にオーバーライドされていることをコンパイラ・レベルでチェックしてくれる。


(5)標準入出力のフォーマット

 C言語のprintf風のフォーマット機能。手軽な文字列の整形が可能だ。
System.out.printf("%s %5d%n", user, total);

(6)可変長引数のサポート
 メソッド呼び出し時の可変長引数のサポート。例えば以下のように、引数の型に続いて「...」と記述すれば、任意数の引数を受け取って配列としてアクセスできる。
public void test(String ... msgs) {
   for (int i = 0; i < msgs.length; i++) {
       System.out.println(msgs[i]);
   }
}
最終更新:2007年01月26日 18:13
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。