Java言語仕様が大きく変わると噂されており、今夏リリース予定のJava 2 Platform, Standard Edition 1.5(開発コード名「Tiger」※またまた、今年も虎ですね!)について
少し触れてみたいと思います。
J2SE 1.5の目標は「Javaプログラミングの簡易化」。プログラマーが書くコードの量を減らしたり、アプリケーション導入を容易にするための改善です。
改善項目は多数言語仕様に追加変更が行われていますが、その中からいくつか大きなものをピックアップしてみます。
サンプルが少し出てきますが、パッと見ただけでも、言語仕様の大幅な改善が読み取れると思います。これまのでバージョンアップとは違う大きなステップアップだと期待大です!
1. Generic Types
従来のJDKライブラリのjava.util.List、java.util.MapではObjectとして要素を扱ってきていたので、型がバラバラな要素をListに登録できたり、また取り出すときには必ずキャストする必要がありました。このgeneric typeでは、登録できる要素の型をあらかじめ宣言でき、登録時にチェックが行われ、また取り出す際のキャストが不要となります。
List nameList = new ArrayList();
nameList.add( "aura" );
String title = words.get(i).toUppercase();
2. Enhanced for loop
Listをfor出まわしながら処理する…なんてことはJavaプログラマの皆さんは何度も体験していると思います。面倒ですよね?皆同じことを考えていた結果、こんなに楽になりました。
List list = new ArrayList();
(旧)
for (int i = 0; i < list.size(); i++) {
System.out.println( (Integer) list.get(i) );
}
(新)
for (Integer i : list) {
System.out.println(i);
}
3. Autoboxing/unboxing
変数には大きく分けて、プリミティブ型(int,char)、オブジェクト(Integer,String)があります。相互変換の為にすべてラッパークラスを用いる必要がありましたが、暗黙で行われるようになります。
(数値のListを生成したい)
List list = new ArrayList();
(旧)
list.add(new Integer(10));
(新)
list.add(20); ←ラッパーオブジェクトに変換する必要なし
代入も可能です。
int x = new Integer(5);
Integer y = 3;
4. Formatted Output
C言語をあつかったことがある人にはお馴染みの可変長引数出力もJavaにはこれまでサポートされていませんでしたが、1.5からはサポートされます。MessageFormatクラスを用いた代替処理を行うこともできましたが、プリミティブを一々ラップしたり・・・・もう1行で書けます!
System.out.printf("%s %5d\n", user,total);
他にも多くの変更・追加がなされていますので、Javaプログラマの皆さんは注意しておいてください。前回、C#とJavaの話題をとりあげましたが、今回紹介した中にはC#には既にもりこまれているものもあります。
[Sun J2SE 1.5詳細]
http://java.sun.com/developer/technicalArticles/releases/j2se15/