【レポート】
Java SEの次期バージョン(Java SE 7)での導入が検討されている「プロパティ」と、それに伴う言語仕様変更が全貌を現しつつある。java.net内のRemi Forax氏のブログによると、プロパティの仕様は現在ドラフト3を閲覧できる状態にあるという。本稿ではそのドキュメントを基に、プロパティが現時点でどのように検討されているのかを見ていきたい。
まず先に、現在のJava言語において「プロパティ」がどういう扱いなのかを復習しておきたい。
ご存じのとおりプロパティとは、クラスが持つ「状態」に対してアクセスするためのAPIだ。多くの場合、フィールドを実体に持つが、記述できるのはそれだけではない。
クラスの状態が変更された場合、副作用として何らかの処理を実行しなければならないこともある。そうしたクラス実装の詳細をカプセル化するための仕組みを、多くのプログラミング言語でプロパティと呼ぶが、Javaには現在のところプロパティが言語仕様として定義されていなかった。
代わりにJavaBean仕様という枠組みの中で、言語仕様外の取り決めとしてJavaにおける「プロパティ」の扱いが定められていた。それはset/getを接頭辞に持ち、それに続く単語の頭文字を大文字にした名前を持つメソッドというものであった(細かく言えば、boolean型の読み取りプロパティはisで始めることが許されたり、「getURL()」のように接頭辞の後に複数大文字が連続してもよかったり、といった取り決めがある)。これらは一般にアクセッサメソッドと呼ばれる。こうした規則に則ったAPIとしてjava.beansパッケージが標準APIに用意されており、そのAPIを用いれば、文字列とリフレクションを使って、それらのアクセッサメソッドに対し「プロパティ」としてアクセスできたのである。Java SE 7で進められている取り組みは、こうしたやり方を根本から見直そうとする動きである。
アクセッサメソッドというアプローチは、以下のような欠点を抱えていた。
こうした欠点を補うべく、Java7で導入されるプロパティは以下のようなものを目指している。
では、具体的に見ていこう。
現在のドラフトで検討されているプロパティの定義方法は以下のようなものである。
文章中に出てきたローカルキーワードは、これまでのJavaには存在しなかった文法要素だ。これはJava言語のキーワード(class、staticなど)ではなく、普段は識別子として使用できるが、文脈によっては特別な意味を持つというキーワードだ。こうした文法要素の導入により、J2SE 1.4のassert、Java SE 5のenumなどで生じたような、キーワードの追加によって新しいコンパイラでソースがコンパイルできないといった混乱を回避するとみられる。
上のルールを具体的にコードで表すと以下のようになる。
public class MyBean {
public property String name1; // 読み書き可能なプロパティ
public property String name2 get; // 読み取り専用
public property String name3 set; // 書き込み専用
public property String name4 bound; // バウンドプロパティ
public property String name5 get set; // 文法エラー
public property String name6 get { return "hello"; }; // 読み取り専用
public property String name7 set(String name) { }; // 書き込み専用
private boolean isReal;
// ユーザ定義プロパティ。以下の場合は読み書き可能
public property String real
get {
return String.valueOf(isReal);
}
set(String real) {
isReal= String.decode(real);
};
}
現在のところ、propertyキーワードで宣言されたプロパティは、その実体となるフィールドと、そのフィールドへのアクセッサメソッドをコンパイラが勝手に生成するという実装を想定しているようだ。そのため、アクセス修飾子、synchronized、もしくはvolatileやstaticといったキーワードをプロパティに付けると、あるものは生成されたフィールドに、あるものはメソッドにというように、適切な箇所にそのキーワードが付与されたのと同じ効果が得られる。
| マイナビ、3月より書籍連動型のクリエイティブ・デザイン系セミナー開講 [12:00 2/10] |
| Linux Mint 12 KDE登場 [10:26 2/10] |
| Dell、重複排除により最大98%のデータ削減が可能なバックアップストレージを発売 [09:44 2/10] |
| 北大、「ポジトロン断層撮影法」による脳腫瘍の性質を診断する手法を開発 [09:40 2/10] |
| NICTなど、手術支援ロボット「da Vinci」の3D裸眼映像伝送実証実験を計画 [09:36 2/10] |
|
【レポート】CP+2012 - デザイン性重視の「K-01」に触りまくる! - リコー、ペンタックス [16:14 2/10] 家電 |
|
Behringer、iPadの入出力を拡張できるドッキングステーション発表 [16:05 2/10] クリエイティブ |
|
[スター・ウォーズ]キネクト専用ゲーム発売へ “R2-D2”デザインのXboxも登場 [15:48 2/10] ホビー |
|
桜の開花日を当てると特別金利! 池田泉州銀行が『花咲か定期預金』13日発売 [15:48 2/10] ライフ |
|
【特別企画】2012年 VAIO春モデルカスタマイズポイント ~VAIO Z編~ [15:44 2/10] パソコン |