【レポート】

インスタンス化に特化した小さなJavaライブラリ「Objenesis 1.0」

    後藤大地  [2007/02/20]

    The Objenesis Teamは19日(米国時間)、Objenesisの最新版となる「Objenesis 1.0」を発表した。Objenesisはインスタンスを生成することを目的として開発されたJavaライブラリ。小さなライブラリだが、なかなか興味深いので紹介しておきたい。

    Javaにおいて動的にクラスをインスタンス化する方法として、Class.newInstance()を使うことが挙げられる。しかしこの方法だと、コンストラクタの状況によってはインスタンス化できないこともある。たとえばコンストラクタが引数を必要とする場合、コンストラクタがなんらかの影響を及ぼす場合、コンストラクタが例外を生成する場合などである。結果的にクラスに対してデフォルトコンストラクタを用意するように制限が課せられることが多いわけだが、Objenesisはインスタンス化においてコンストラクタをバイパスすることでこれらの制限を回避することを目的としている。

    コンストラクタをコールせずにインスタンス化を実施する必要とは、たとえばシリアライゼーション/リモートおよびパーシスタンスなどを実施する場合に要求される。シリアライゼーションやパーシスタンスではメソッドをコールせずに状況を復帰させる必要がある。ほかにもプロキシやAOPライブラリ/モックオブジェクトではスーパークラスのコンストラクタに関与しないようにクラスをインスタンス化する必要があるし、コンテナフレームワークなどでも同機能は必要になってくる。

    Objenesisではオブジェクトの型、Java仮想マシンのバージョン、Java仮想マシンのベンダ、SecurityManagerの状況など、多くの状況を加味してインスタンス化を実行している。具体的にどのような方法で実施しているかは同プロジェクトのサイトに詳細な文章が用意されているので、興味がある方はご覧いただきたい。

    Objenesisは他のライブラリに依存しておらず、ほかにも依存性を排除するように考慮されているため、既存のアプリケーションに簡単に組み込んで活用することができる。

    執筆現在においてObjenesisがサポートしているJava仮想マシンはSun Microsystems Hotspot VM 1.3/1.4/1.5、GCJ 3.4.4 (Windows/Cygwinでの試験結果)、BEA JRockit 7.0 (1.3.1)/1.4.2/1.5とされている。これ以外のプラットフォームは動作試験を実施していないため、場合によってはこれ以外のプラットフォームでも動作する。

    動的なインスタンス化について頭を悩ませてきたデベロッパはObjenesisを検討してみるといいだろう。ドキュメントもある程度充実しているため取り組みだすにあたってそれほど難しいことはないだろう。

    関連サイト

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン