@IT会議室は、2009年4月15日に新システムに移行し、さらに2012年5月29日にITエンジニアに特化した
質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用くださいませ。
- PR -

Commons BeanUtilsの使い方

1
投稿者投稿内容
いくや
会議室デビュー日: 2004/03/17
投稿数: 3
投稿日時: 2004-03-17 02:27
Commons BeanUtilsの使用方法について、質問があります。

ある特定の文字列から、一定のバイト数ずつ切り取って、
Beanのプロパティに設定していく処理を考えています。

import org.apache.commons.beanutils.*;
(中略)
public class Test2BeanUtils {
public static void main(String[] args) {

TestBean bean = new TestBean();

String tmpStr = "ABCDEF002GHI";
Object obj = tmpStr.substring(6, 9); // "002"が取得される
PropertyUtils.setProperty(bean, age, obj);
//↑でエラーが発生
(省略)
}

public class TestBean {
private String name;
private int age;
(Setter,Getterは省略)
}

PropertyUtils.setPropertyの部分で、
"java.lang.IllegalArgumentException: argument type mismatch"
というエラーが発生します。

Int型にObject型をセットしようとしているのが、エラーを起こしていると思われるのですが、解決方法がわかりません。
どなたかご存知の方がおりましたら、ぜひ回答をお願いします。

よろしくお願いします。
ayum
常連さん
会議室デビュー日: 2002/03/28
投稿数: 44
お住まい・勤務地: 東京
投稿日時: 2004-03-17 08:40
Commons BeanUtilsのsetPropertyメソッドは、
セットする値がintやbooleanのようなプリミティブ型の場合
そのラッパークラスでラップして渡してあげる仕様です。
ので、少しコードを修正させていただくと、

コード:


Integer obj = new Integer(tmpStr.substring(6, 9)); // "002"が取得される
PropertyUtils.setProperty(bean, age, obj);



のように記述すればよいのではないでしょうか。
(なお、例外処理は割愛させていただきました)

これはCommons BeanUtilsというよりはJavaのリフレクションの仕様なので、
詳細はAPIドキュメントのリフレクション周りをご参照ください。

#コードにポカがあったので修正しました。失礼しました。

[ メッセージ編集済み 編集者: ayum 編集日時 2004-03-17 08:58 ]
いくや
会議室デビュー日: 2004/03/17
投稿数: 3
投稿日時: 2004-03-18 13:16
回答ありがとうございます。
Javaの仕組みが良くわかっていなかったですね…
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-03-18 16:05
引用:

いくやさんの書き込み (2004-03-18 13:16) より:
回答ありがとうございます。
Javaの仕組みが良くわかっていなかったですね…



マルチポストという言葉はご存知?

http://www.vc-net.ne.jp/~ytp/bbs/java/bbs18806.html
の質問にも答えてくれた人がいるんだから、ちゃんと結論・結果を書いてください。

自分の疑問が解消したらあとは知らない、という人がいるので
マルチポストは嫌われるのです。
1

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

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