もっと早く使えばよかった。。。

2007.02.01 (木) 12:14
ugnag


先日JAVA6をインストールしたが、それでもコンパイルモードは1.4のままだった。

これには理由がある。

JAVAは5.0から言語仕様が大幅に拡張された。
この中には使いたい機能がいっぱいあるのだが、唯一ジェネリクスという機能だけ使いたくない。
そのためずっと1.4を使っていたのだ。

ジェネリクスというのは、汎用的な処理をするクラスに型を限定させるもの。

例えば、ArrayListという動的配列を管理するクラスがあるが
これに文字列を追加し取り出すには、



String a="abcde";
String b="123456";
ArrayList list = new ArrayList();
list.add(a);
list.add(b);

String a2 = (String)list.get(0);
String b2 = (String)list.get(1);



というようになる。

addメソッドは引数にObject型をとる。
Object型は全てのクラスのスーパークラスなので、どんなクラスもaddに指定できる。

ところが取り出す場合は、
String a2 = (String)list.get(0);
というようにString型にキャストしなければならない。

そのため、追加したときと取り出すときで型が間違える場合があった。


さて、ジェネリクスだ。
この間違いを起こさないような仕組みである。

JAVA5.0のジェネリクスを使って書くとこうなる。



String a="abcde";
String b="123456";
ArrayList<String> list = new ArrayList<String>();
list.add(a);
list.add(b);

String a2 = list.get(0);
String b2 = list.get(1);



つまり、listオブジェクトはString専用となり、他の型を追加/取得しようとするとコンパイルエラーとなる。


素晴らしい機能なのだが、<>を付けなければならない。
今までのソースを再コンパイルするとエラーだらけになるからと思い、この機能を避けるためにずっと1.4系を使っていたのだ。


ところが、今回


せっかくインストールしたし、試しに使ってみるか。
さて、どんなエラーが出るのかな?


なんて思ってやってみたら、、、、

あれ?


エラーが出ない。。。

なぜ???

[7] beginning... [9] >>
[1] comments (1)
-


[7] << WMP11
[9] GBA携帯暗号化 >>
[0] [top]


[sb 1.10R]