もっと早く使えばよかった。。。
先日JAVA6をインストールしたが、それでもコンパイルモードは1.4のままだった。
これには理由がある。
JAVAは5.0から言語仕様が大幅に拡張された。
この中には使いたい機能がいっぱいあるのだが、唯一ジェネリクスという機能だけ使いたくない。
そのためずっと1.4を使っていたのだ。
ジェネリクスというのは、汎用的な処理をするクラスに型を限定させるもの。
例えば、ArrayListという動的配列を管理するクラスがあるが
これに文字列を追加し取り出すには、
というようになる。
addメソッドは引数にObject型をとる。
Object型は全てのクラスのスーパークラスなので、どんなクラスもaddに指定できる。
ところが取り出す場合は、
String a2 = (String)list.get(0);
というようにString型にキャストしなければならない。
そのため、追加したときと取り出すときで型が間違える場合があった。
さて、ジェネリクスだ。
この間違いを起こさないような仕組みである。
JAVA5.0のジェネリクスを使って書くとこうなる。
つまり、listオブジェクトはString専用となり、他の型を追加/取得しようとするとコンパイルエラーとなる。
素晴らしい機能なのだが、<>を付けなければならない。
今までのソースを再コンパイルするとエラーだらけになるからと思い、この機能を避けるためにずっと1.4系を使っていたのだ。
ところが、今回
せっかくインストールしたし、試しに使ってみるか。
さて、どんなエラーが出るのかな?
なんて思ってやってみたら、、、、
あれ?
エラーが出ない。。。
なぜ???
よく見ると、ワーニングが出ている。
なんだ?
ようするに
「ジェネリクスを使った方がいいですよ」
てな内容。
ということは、エラーにならない?
ということは、今までのソースを再コンパイルしても問題ない?
マジ?
今までJAVA5.0に関して読んだ本にはそんなこと一言も書いてなかったぞ!!
当たり前にダメなのかと思ってた。
だったら、もっと早く使ってたのに。。。。
まあいい。今後は全部JAVA6.0でコンパイルだ!!
これには理由がある。
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 (1) | -
Comments
https://www.bagssjp.com/product/detail-443.html
https://www.bagssjp.com/product/detail-9765.html
https://www.bagssjp.com/product/detail-9446.html
https://www.bagssjp.com/product/detail-5125.html
https://www.bagssjp.com/product/detail-3642.html