ugnagブログ

たいした内容はありません。思いつきで書いているだけ。
開発日記がメインかな。

<< WMP11 | main | GBA携帯暗号化 >>

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

今までJAVAは1.4系を使っていた。
先日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系を使っていたのだ。


ところが、今回


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


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

あれ?


エラーが出ない。。。

なぜ???

よく見ると、ワーニングが出ている。

なんだ?

ようするに

「ジェネリクスを使った方がいいですよ」

てな内容。


ということは、エラーにならない?
ということは、今までのソースを再コンパイルしても問題ない?


マジ?


今までJAVA5.0に関して読んだ本にはそんなこと一言も書いてなかったぞ!!

当たり前にダメなのかと思ってた。

だったら、もっと早く使ってたのに。。。。

まあいい。今後は全部JAVA6.0でコンパイルだ!!
JAVA | comments (0) | -

Comments

Comment Form

本文に書いて下さい
本文にh抜きで書いて下さい