【コラム】
J2SE 5.0に導入されたEoDにGeneric Javaがある。前回、Generic Javaはジェネリックプログラミングを実現するためのテンプレートの一種であることを紹介した。今回は具体的にどのようにGeneric Javaを使用するかを紹介する。
Generic Javaは、対応したクラスを作成する方は面倒だが、使う分には簡単だ。従来のソースコードと比較するとわかりやすいだろう。J2SE 5.0ではコレクションフレームワークAPIがGeneric Javaを使うように書き換えられているので、コレクションフレームワークを使う例を紹介しよう。
まず、J2SE 1.4までで動作するように書いた場合のソースコードをリスト1に示す。これはコレクションにIntegerオブジェクトを保持し、それを取り出して出力するものだ。
次に、これをJ2SE 5.0でGeneric Javaを使うように書き換えたソースコードをリスト2に示す。
まず注目されるのは、宣言の方法が変わっていることだ。ArrayListの部分がArrayList<Integer>のように変わっている。記述方法の変更という点では、これが一番大きな変更だろう。C++ STLのような記述方法が導入されたわけだ。
ArrayListのように宣言した場合、ArrayListコレクションにはオブジェクト型であればどのようなオブジェクトでも代入できる。J2SE 5.0で新しく導入されたGeneric Javaではこれに加えてArrayList<Integer>のような記述ができるようになっている。ArrayList<Integer>のように記述すると、ArrayListが保持できるオブジェクトはIntegerに限定される。
ArrayList<Integer>のように宣言した場合、そのコレクションが保持するオブジェクトはIntegerオブジェクトということが明確になるため、Integerオブジェクトをやりとりするという前提のもとコードが書けるようになる。先ほどのコードを比較すると、リスト4のようにコレクションから取り出したオブジェクトに対してキャスティング処理を行っていないことがわかるだろう。
つまり、EoDという観点でみた場合、Generic Javaが適用されたAPIを使用するにあたっての効能は、まさにこの点にある。Javaソースコードにおけるキャスティングの多さはJ2SE 1.4までは宿命的なものがあった。これまでのJavaの仕組みでは、キャスティングを多用しなければプログラムが作成できなかったのだ。これがGeneric Javaの効果として、キャスティングを行わなくてもよくなったのだ。
Generic Javaを適用されたAPIを使用する利点は他にもあるが、EoDという観点ではこの点がもっとも大きい。また、J2SE 5.0で導入されたGeneric Java以外のEoDも適用してソースコードを書き直したものをリスト5に示しておく。拡張for構文とAutoboxing/unboxing機能を使っている。リスト1と比べると記述がすっきりしていることがわかるだろう。
Generic Javaが適用されたAPIを使うという観点でいえば、リスト2だけがわかっていればよい。逆にいえば、J2SE 5.0を使っていく場合、最低限でもリスト2は読めて書けるようにしておく必要はあるだろう。
ArrayList<Integer>のように宣言してコレクションで保持するオブジェクトを限定するということは実はとても便利なことなのだが、よくわからない人にはピンとこないかもしれない。コレクションフレームワークを使っていればわかると思うが、コレクションに多種類のオブジェクトを代入しておくということはあまり行わない。理由はかんたんで、それは人が理解しにくいためと、ソースコードが煩雑になるからだ。複数の種類のオブジェクトを保持すると、取り出してからinstanceofで比較してキャスティングするというコードをはさむ必要がでてくる。これは煩雑だ。
こういった理由から、コレクションにはだいたい同じオブジェクトしか保持しないが、J2SE 1.4までのJavaでは、同じオブジェクトしか保持していないにもかかわらず、かならずキャスティングが必要だった。Javaにそのような仕組みがなかったからだ。
J2SE 5.0で導入されたGeneric Javaのおかげで、これを自動処理できるようになった。これは簡単な話のようだが大きなEoDだ。
| 大阪市大とエコナビスタ、疲労医学研究を元にした「快眠健康ナビ」を製品化 [18:00 5/23] |
| 東大、ほ乳類の成体でも「神経幹細胞」が維持される仕組みを解明 [16:59 5/23] |
| 武蔵野化学研究所、高純度ポリ乳酸の高品質化に成功 [14:21 5/23] |
| 成層圏の「赤道準2年振動」は過去数10年弱まり続けている - JAMSTECなど [14:09 5/23] |
| TI、迅速なモーター回転設定が可能なセンサレスBLDCモータードライバを発表 [14:05 5/23] |
|
【インタビュー】名脇役でオファー殺到中の浜野謙太、多才を生み出したのは"平凡" - 映画『体脂肪計タニタの社員食堂』 [21:30 5/23] エンタメ |
|
mixiのプロフィールページに"ヒトコト"を残せる「mixi伝言板」がスタート [21:20 5/23] 携帯 |
|
[夏帆]星野源から「男気ある」と絶賛され「ウッス!」 [21:14 5/23] エンタメ |
|
Yahoo! JAPANの不正アクセス拡大か - 一部IDのパスワードを強制リセット [21:06 5/23] パソコン |
|
30代独身男性に聞く。20代と比べて変わったこととは? [20:57 5/23] 住まい・インテリア |