すがブロ

sugamasaoのhatenablogだよ

JDK5の機能(1)

もういい加減JDK5の新機能くらい抑えておかないとこの世から取り残されちゃうよね、ってことで調べてみた。いや、知ってることは知ってるんだけど、実際にコードに落としたりしたこと無かったんで。
動作検証のバージョンは以下の通り

  • WindowsXP SP2
  • JDK1.5.0_05

で、今回はジェネリックについて。
簡単に言うと、(主に)ArrayListなどのコレクションに実装されていて、本来Object型で受け取るこれらのクラスに対して明示的に型を指定できるっていうもの。
基本的な書き方は以下の通り

List<String> list = new ArrayList<String>();
list.add("test");
String str = list.get(0);  <- Stringへのキャストが不要!

このように明示的に受け取る型を記述することで、違った型を入力しようとしたりするとコンパイルエラーとなる。
このコンパイルエラーとなるのがミソで、こうすることでキャストのミスなどで実行時にエラーとなるのを未然に回避できる。…・・・つまり、型安全(タイプセーフ)が保障されるわけだ。
ちなみに、上の構文をコンパイルしたclassファイルをjadというソフトを使って逆コンパイルしてみると以下の構文になる。

List list = new ArrayList();
list.add("test");
String str = (String)list.get(0);

これを見ると分かるように、ジェネリックを使っても結局のところコンパイル後に生成されるバイトコードは従来のものと変わらない。……つまり、あくまでもコーディング上のサポートのようなものなので実行速度がどうの、と言ったことを心配することなく使いまくれるってわけだね!