Java Beans について思うこと2008年08月21日 17時56分18秒

Java Beans は Java の規格や実装ではなく、規定だ。単純に言えば、Java Beans は クラスは必ず、引数を取らないコンストラクタを持ち、全てのメンバ変数に Set と Get をする関数を持つことだ。これは、外部スクリプトや、Java インタプリタ内で機械的にクラスを処理出来るようにと決められたルール。コードを自動生成するような時に、簡単にメンバ変数を取得、変更出来るようにとの意図がある。

この規定自体は良く出来た物だと思う。しかし、実装と実現方法が悪い。単純なルールに沿って関数を作るだけの規格なのに、簡単に実現する方法がない。いくつかの Beans 生成のツールなどもあったが、全ての用途に使える物ではない。手で書くことも出来るが、面倒くさいことこの上ない。変数の名前を変えるだけなのに、最低二つの関数の名前を変える事が必要になる。いわばコンピュータの奴隷となるを強いる規定なのだ。しかも、Java のクラス関数の全てを一つのファイルに詰め込まなくてはいけない文法により、実装には直接的に関係ない関数が結構な量の行数を占めてしまう事もある。はっきり言ってコードが見づらい。

似たような実装に Serializable つまり、直列化がある。ObjectStream クラスの readObject と writeObject が重要な役割を果たしている。それゆえ、全てのオブジェクトが Serializable を implements するだけでストリームを通して読み書きできるようになる。もし独自の実装が必要なら、自らその読み書きの方法を書き換える事も出来る。

Beans インターフェイスを Java のコアクラスの一つとして作り、implements をしたクラスをコンパイル時に検出する。そして、実装されている setter や getter はそのまま使い、存在しない物をコンパイラによって生成すれば速度にペナルティを払わずに実現出来る。まあ、インタプリタにて setter や getter を生成することも出来るだろう。

と思い続けて、既に十年ぐらい経つのであろうか。例え自動生成できても、目障りなコード。この現状をどうにかしてくれないかと、再び思う日々であった。