- - PR -
BeanのプロパティをIteratorで取得する方法
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-16 19:37
BeanのプロパティをIteratorで取得したいのです。
下に例をあげます。
jakarta-commonsに、使えそうなコンポーネントが無いが探してみました。 collectionsのBeanMapクラスにvalueIteratorメソッドがありましたので、使ってみましたが・・・
となります。 どうやら、クラス名まで、Iteratorで返されるようです。 表題のような要求を満たすコードを書くとき、皆さんはどうされてます? Beanに、Iteratorパターンを実装する・・・という方法も考えられるとは思います。 しかし、jakartaのcollectionsやBeanUtilsには、良いコンポーネントがあるような気がしてならないのですが・・・ そもそも、プロパティをIteratorで・・・なんて考え方がおかしいのか? 最近、コンポーネント化・部品化について、考えるようになってきました。 そんな日々の中で、悩んでいる次第です。 | ||||||||
|
投稿日時: 2004-05-16 21:11
Field[] fields = car.getClass().getDeclaredFields();
でCarクラスで定義したフィールド一覧を配列で取得できます。 どうしてもIteratorで取りたければ、 Iterator it = Arrays.asList(fields).iterator(); で配列からListを生成してそのiteratorを取り出すことはできます。 面倒なのは、スーパークラスにあるフィールドも含めたいときです。 ClassクラスのgetSuperclassメソッドで再帰的にスーパークラスを たどってgetDeclaredFieldsメソッドでフィールドを取得していく ことになるかと思われます。 | ||||||||
|
投稿日時: 2004-05-17 10:39
java.beansパッケージの
BeanInfoクラスやPropertyDescriptorクラスを使えば、 似たようなことはできますが・・・ # 帰ってくるのがIteratorではなくてPropertyDescriptorの配列だとか、 # 値を取るのにinvokeしなきゃいけないとか、多少面倒ですが。 どうしてもIteratorで欲しいなら、各BeanにgetIteratorってメソッドを実装してしまうのが一番簡単なような | ||||||||
|
投稿日時: 2004-05-17 11:23
こんにちは、Wataです。
これは、Object#getClass()をプロパティとみなしているからでしょう。 classプロパティを含まないIteratorが欲しいのなら以下のようにするのはどうですか?
| ||||||||
1
