- PR -

クラス内のフィールドを取得する関数の一覧

1
投稿者投稿内容
どんたくお
ベテラン
会議室デビュー日: 2005/08/29
投稿数: 88
投稿日時: 2005-12-08 21:57
みなさんこんにちは。
どんたくおです。

たとえば、以下のようなクラスがあるとします。
public class Hoge {
private String title;
private String book_id;
private String book_name;

public void getTitle() {
return this.title;
}

public void getBook_id() {
return this.book_id;
}

public void getBook_name() {
return this.book_name;
}

public Hoge() {
}
}


たとえば、このクラスの中で、フィールドをセットする
Hoge#getTitle
Hoge#getBook_id
Hoge#getBook_name
は、
Hoge h = new Hoge();
String title = h.getTitle();
とすると、titleフィールドの値が取得できます。

ただ、こうするにはインスタンスを作成し、titleフィールド値を取得する
getTitle
という関数名を知っている必要があります。

Hogeというクラスのフィールド値を取得する関数を取得し実行する方法など
ありますでしょうか。

Class.getMethods()
を使用すれば、できそうかなと思ったのですが、可能なのでしょうか。

ご存知の方がおいでましたら、ご教授いただけるとさいわいです。

// Strutsはどうやって、ActionFormに値をセットしているのでしょうかね。

117
ベテラン
会議室デビュー日: 2005/05/09
投稿数: 94
お住まい・勤務地: 大阪府
投稿日時: 2005-12-08 22:08
java.lang.reflect パッケージを調べられてはどうでしょう
_________________
# Future Is On Fire !
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-12-08 23:01
コード:
Foo foo = new Foo();
Method method = foo.getClass().getMethod("getBar",new Class[0]);
String bar = (String)method.invoke(hoge,new Object[0]);


例外処理をしていないですが、
java.lang.Class/java.lang.reflect.Methodで実行可能です。

インスタンスのメソッドを実行するには、
invokeメソッドに対象のインスタンスを指定する必要がありますが、
クラスのメソッドを実行するだけなら、
invokeメソッドの第一引数にnullを指定すればOKです。
どんたくお
ベテラン
会議室デビュー日: 2005/08/29
投稿数: 88
投稿日時: 2005-12-09 16:06
117さん
かつのりさん
ご返信いただきまして、ありがとうございます。


117さんと、かつのりさんにご助言いただきました、java.lang.reflectパッケージを確認しました。

最終的に、マップにbeanのフィールド値を全部格納したかったため、以下のようにしました。

// 例外処理は、いれてません。
Field[] fields = o.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
String name = fields[i].getName();
String p = (String)PropertyUtils.getProperty(o, name);
m.put(name, p);
}

reflectパッケージもはじめてしったのですが、jakarta commonsのBeanUtilsはすごい便利そうです。


みなさま、ありがとうございました。

1

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