【コラム】
これまでJava SE 5.0で導入されたEoDとしてAutoboxing/Unboxing、可変長引数、列挙型、拡張for構文、Static Import、Generic Javaを紹介してきた。今回から、Java SE 5.0で導入されたEoDのなかで、本質的にもっとも重要な機能となるアノテーションについて説明する。
アノテーションはこれまでに説明してきたEoDとは本質的に異なる。これまでに紹介してきたEoDが従来の言語機能の書き換えや便利な機能のマージであることに対して、アノテーションはJavaに新しい言語の側面を導入するものであり、プログラミングのあらゆるスタイルを変更する可能性を秘めている。
なおこれまで、Javaのバージョンを表現する言葉として「J2SE 5.0」といった表記を用いてきたが、これからは「Java SE 5.0」のように新しい表記に改める。SunはJavaOneにおいてJavaのバージョン表記を従来の「Java 2 SE 1.5」といった表記から、「Java SE 5.0」「Java EE 5.0」のようにJava 2の2を落とした表記に変更することを発表した。Java 2の2はJavaの発展の途中で新規性を表現するために導入された文句だが、現状ではもはや不要だった。新しい表記の方がより自然だ。
また、今後はバージョンを区別するために開発コード名を使うこともある。現在リリースされているバージョンは「Java SE 5.0 Tiger」であり、今後リリースが予定されているバージョンは「Java SE 6.0 Mustang」、「Java SE 7.0 Dolphin」である。Tigerと表記された場合はJava SE 5.0を、MustangやDolphinと表記された場合にはそれぞれJava SE 6.0や7.0を指し示していると思っていただきたい。
Tigerで導入されたアノテーションはまだJavaに登場したばかりの機能で、多くのJavaプログラマはまだ慣れていないだろう。アノテーションを使った実装は今後さらに普及する見通しで、いくつもの機能が今後リリースされるMustangやDolphin、EEやMEで採用されることがわかっている。別のバージョンでの採用見通しなどに触れる機会も増えるため、あらかじめ名称について説明するものである。
Tigerで導入されたアノテーションは、ソースコードそのもの対して情報を与えるものだ。メタデータを表現するための機能だともいえる。アノテーションはJavaが記述方法の参考としているC言語やC++言語には用意されていない機能で、近いところではC#に導入されている属性をあげることができる。
C#はJavaから多くの機能を模倣して開発されたプログラミング言語だが、JavaもまたTigerにおいてC#で導入された機能の多くを導入している。双方ともに今まさに発展している言語であり、お互いに利点を吸収しながら発展しており、実現している機能はよく似ている。
アノテーションは、従来のJavaの言語機能とは直交しているといわれる。つまり、従来のプログラミング機能に変更を与えるものではなく、アノテーションを使用しようがしまいが、その動作には影響を与えないものだということだ。
ではなにが重要なのかということになるが、それは大きくわけて次のふたつになるといるだろう。
アノテーション自身は言語に対して直交するが、アノテーションがもたらすパラダイムは大きい。言語として直交するという点よりも、それがもたらすパラダイムに注目するべきだ。アノテーションがJavaにもたらす言語としての変更の大きさは、これまでJavaに導入された機能のどれと比べても大きく衝撃的になりそうだからだ。プログラミングのスタイルがいっぺんする可能性がある。
概念的な話ばかりになってしまい申し訳ないが、要するにアノテーションとは、インターフェースのような、そしてもっと違った何かが導入されたのだと理解していただければいいかもしれない。インターフェースはJavaにおけるプログラミングにおいてはきわめて重要な機能であり、多くのフレームワークはインターフェースプログラミングを基本においている。
これがアノテーションの導入によって、フレームワーク作りのベースがインターフェースからアノテーションに変更される可能性を秘めている。現に、Java Core APIに含まれていない、プロジェクトやサードベンダからリリースされている多くのフレームワークがこれまでのインターフェースを使った記述から、アノテーションを使った記述に切り替えている。フレームワークを使う方としては、アノテーションを使った方がインターフェースを実装してXMLファイルに設定を書く作業よりもよほど簡単なのだ。
エンタープライズシステムやサーバシステムを開発している多くの技術者は、すでにアノテーションに触れているだろう。逆に、それ以外のユーザはまだアノテーションに触れていないかもしれない。以降の連載では、アノテーションの基本的な機能や使い方から始め、アノテーションについて詳細に説明していこうと思う。
アノテーションはTigerにおいてもっとも重要にして、今後のJava言語の方向性を位置づける重要な機能だといえる。Javaに関わる技術者は、アノテーションの使い方を習得するとともに、アノテーションという概念がもたらす本質的な変更について理解する必要があるといえるだろう。
【コラム】ダイナミックObjective-C 第15回 クラスとは何か(2) - クラス情報に直接アクセスする
【コラム】ダイナミックObjective-C 第14回 クラスとは何か(1) - Mac OS X/Objective-Cにおけるクラスの実装を読む
| 武蔵野化学研究所、高純度ポリ乳酸の高品質化に成功 [14:21 5/23] |
| 成層圏の「赤道準2年振動」は過去数10年弱まり続けている - JAMSTECなど [14:09 5/23] |
| TI、迅速なモーター回転設定が可能なセンサレスBLDCモータードライバを発表 [14:05 5/23] |
| AlteraのStratix V GX、PCI-SIGインテグレーターズ・リストに掲載 [13:56 5/23] |
| 住友電工、薄型化と回路の高精細化が可能な導電性ペースト接続FPCを開発 [13:45 5/23] |
|
東京都・錦糸町でバッタの生パスタ「イナゴのペペロンチーノ」登場 [16:01 5/23] ライフ |
|
でんぱ組.inc、盗まれた新曲を探す謎解きに探偵姿で挑戦! [16:00 5/23] エンタメ |
|
LG、どこにでも持ち運べて手軽に印刷できるモバイルフォトプリンタ [15:53 5/23] パソコン |
|
【注目Q&A】夫が"浮気してやる!"と家出して明け方に猪をおぶって帰ってきた [15:51 5/23] 恋愛・結婚 |
|
[藤井フミヤ]登山歴10年生かし冠番組で山岳紀行 [15:49 5/23] エンタメ |