2004年12月18日

5.0だタイガーだ

いやぁ、J2SE5.0 Genericsの熱いこと熱いこと。
しかも拡張for文と併せて使った日には、Iterator要らずですよコンチクショー。
さらにprintfなんて使うと…

Class A{
 String name;
 int value;
}

A a1 = new A();
a1.name = "aaa";
a1.value = 1;
A a2 = new A();
a2.name = "bbb";
a2.value = 2;

// ここからすごい
List<A> list = new ArrayList<A>(); // Generics
list.add(a1);
list.add(a2);

for(List a: list){ // 拡張for文
 // 可変長引数 printf
 System.out.printf("name : %s, value : %d\n", a.name, a,value);
}

--- 出力 ---
name : aaa, value : 1
name : bbb, value : 2

ざっとこんなもんですよ。

ちなみに1.4までなら
List list = new ArrayList();
list.add(a1);
list.add(a2);
Iterator ite = list.iterator;
for(ite.hasNext()){
 A a = (A)(ite.next);
 System.out.println("name : " + a.name +
         ", value : " + a.value);
}
てなわけだ。

たまらんぞ 5.0。
ガオー。
と。
posted by delico at 02:07| 大阪 ☀| Comment(6) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
なにがどう違うのやら

詳しく解説希望っ!
Posted by ひろり at 2004年12月18日 10:48
反復に必要そうなパラメータやら次の要素やらを
ほとんど意識せずにコーディングすることが出来るわけですな
Posted by でゅえ at 2004年12月18日 14:24
>>ひろり

従来のコレクション型は
List list = new ArrayList();
list.add(a1);
という具合にオブジェクトを格納していました。
このとき、a1は元のA型ではなく、Object型として格納されてしまいます。
よって取り出すときにA型にキャストする必要が生じるわけです。
これは即ち、格納した型を実装者が覚えておく必要があるということで、実行時のキャストエラーの危険が潜んでいます。

一方、Genericsを用いると、
List&lt;A&gt; list = new ArrayList&lt;A&gt;();
という具合に、コレクションで格納するオブジェクトの型を予め宣言できるのです。
つまり、格納や取り出し時にオブジェクトの型を気にする必要がなく、コンパイラがキャストエラーの危険を回避してくれるのです。

次に拡張for文ですが、従来、配列やコレクションの要素を全て取り出すとき、決まりきった処理がありました。
String[] array = {"a","b","c","d"};
for(int i = 0; i < array.length(); i++){
 System.out.print(array[i]);
}
という具合です。

しかし、拡張for文の場合、
String[] array = {"a","b","c","d"};
for(String s: array){
 System.out.print(s);
}
だけで済みます。
本文の方はコレクションですが、どちらもすっきりしています。
僕はperlのforeach文を連想しました。

最後にprintfですが、これはcのprintfをJavaのFormatterクラスを用いて実装しただけです。
が、メソッドの引数が可変長であるという部分が新しいです。
ちなみに可変長メソッドの宣言は
method(Object... args)
のようになります。

他にも5.0の新機能はたくさんあります。
が、その多くについてEclipseが未対応なので、対応が追いつき次第、すぐに試してみたいと思います。
Posted by もとぅー at 2004年12月18日 21:46
JAVA WORLDを片手に書き込んだと予想
Posted by でゅえ at 2004年12月18日 22:02
>>でゅえ

残念、素で書き込みましたよ。
だって昨日JAVA WORLD片手に試しましたから!

だから表記法はあってるけど、意味の解釈は主観的かも。
Posted by もとぅー at 2004年12月19日 04:36
同じようなことを難しく書いている記事を発見しました。
詳細はこちらを参照してください。

for/inでJava 5.0 のループを拡張
http://www-6.ibm.com/jp/developerworks/java/041217/j_j-forin.html
Posted by もとぅー at 2004年12月20日 01:25
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/1326679

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。