- PR -

フィールド名からgetter/setterメソッド名の生成について

1
投稿者投稿内容
yamamoto
会議室デビュー日: 2002/03/02
投稿数: 8
投稿日時: 2005-11-28 11:40
yamamotoです。

Javaのソースを生成するソースジェネレーターを作成しています。
その中に、JavaBeansのクラスも含まれており、フィールド名からJavaBeans規約に則った形のメソッド名を導き出したいと思っています。
今は、ハードコーディングで規約に従うようには作っているのですが、Javaのコアライブラリなどで変換できるのであればそれを使いたいと思っています。
調べてもなかなか行き着かないので、質問することにしました。

CommonsのBeanUtilでできそうな気はするのですが・・・。

よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2005-11-28 14:05
的外れかもしれませんが,eclipseを使えば良いのでは?
他にもimport文の整理とか,Stringの定数化とか,いろいろ機能があります.
yamamoto
会議室デビュー日: 2002/03/02
投稿数: 8
投稿日時: 2005-11-28 14:48
yamamotoです。

ありがとうございます。
確かにIDEを使えば済む話なのですが、大量のソースを機械的に生成する際に、IDEのリファクタリング機能では追いつきません。
人の手を介さずに大量のJavaコードを作ることを想定しています。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-11-28 19:05
リフレクションを利用してみては如何でしょうか。

指定のクラスからフィールドをプログラム内で取得する場合、
コード:
class Foo{
    String bar1;
    int bar2;
}


と言うクラスがあれば、
コード:
(メソッド内)
Class cls = Foo.class;
java.lang.reflect.Field[] fields = cls.getFields();
for(int i = 0; i < fields.length; i++){
    String name = fields[i].getName();
    Class type = fields[i].getType();
}


というようにフィールドの名前と型の取得が可能です。
privateフィールドの場合はClass#getDeclaredFieldsで取得が可能です。
名前を指定して取得するメソッドもあります。

名前と型が取得できれば、クラスに対応するソースを検索して
書き足すようにI/O操作を行ってから再ビルドを行えばよいかと思います。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-11-28 22:58
Javaassistなんていかがでしょうか。

データ格納用のBean程度なら、簡単な設定でクラスファイルを生成できるような
仕組みが作れますよ。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-11-29 01:22
>シュンさん

Javassistだと、クラスファイルを直接書き換えることが可能ですが、
ソースコードが残らないので、プロジェクトでは利用しにくいと思います。
(納品物としてソースも提供するケースが多い)

また、実行時にクラスを生成しても、
コンパイル時に解決可能なsetter/getterのメソッドを持つ
インターフェイス等を実装させなければ、
利用側のクラスではリフレクション操作にて
getter/setterを実行しなければいけません。

そこまでするくらいなら、
java.util.Mapで事足りてしまうのではないでしょうか。
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2005-11-29 02:01
middlegenなどはいかがでしょう。
Take-C
常連さん
会議室デビュー日: 2002/05/09
投稿数: 23
投稿日時: 2005-11-29 10:01
以前JakartaのPOIとVelocityを組み合わせて作ったことがあります。
この場合、Excelでクラス定義ファイルを作成し、POIでそのデータを読み込んでVelocityを通じて出力します。

公開できないのが残念ですが・・・
一度作ってしまえば応用がかなり利くので、時間があれば勉強がてらやってみてはいかがでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)