2009-10-30 11 views
8

私はメンバーが一揃いのDTOを持っています。私は、Javaがクラスのfor(in)の考えをサポートしているかどうか疑問に思っていました。私はそうは思わないが、それができたらそれは私に悲しみのトンを救うだろう。だから、そこに質問を投げかけようと思った。javaのクラスメンバーをループすることはできますか?

+0

「DTO」とは何ですか? – CodyBugstein

+1

あなたは3.5年前に答えられた質問でこれを聞いていますか? DTOは、通常、結果のdbテーブルに関連付けられているデータセットを表すために使用されるオブジェクトです。私はここで春を使っていました。私はそれがほとんどのJDBCの状況で使用されていると推測します。 –

+0

私は時間がないサイバースペースの物事の大きなスキームでは3.5年とは何ですか?ご回答有難うございます。 – CodyBugstein

答えて

26

さて、あなたが反射でそれを行うことができます。

for (Field field : clazz.getFields()) 
{ 
    ... 
} 

(またはメソッドなどの等価)を

あなたは、フィールドの特定のインスタンスの値、または静的な値を得ることができます。

+0

+1は簡潔です。 –

+0

非常に義務付けられています。ありがとう。 –

4

はい、Reflection APIを使用してください。特にgetFieldsgetMethodsの方法をClassから調べてください。

0

リフレクションを使用すると、すべてのメンバーと関数を取得できます。

多分、DTOにこれほど多くのメンバーが必要だと思うかもしれません。リファクタリングに時間がかかるかもしれない。

7

それはそれはしかし手間のビット、ありません。

あなたはリフレクションを使用する必要があります。

参照:Class.getDeclaredFieds()

このClassオブジェクトが表すクラスまたはインタフェースによって宣言されたすべてのフィールドを反映するFieldオブジェクトの配列を返します

あなたは例を見ることができますhere

フィールドを取得する方法は3つありますClassオブジェクトのオブジェクト

Class cls = java.awt.Point.class; 

// By obtaining a list of all declared fields. 
Field[] fields = cls.getDeclaredFields(); 

// By obtaining a list of all public fields, 
// both declared and inherited. 
fields = cls.getFields(); 
for (int i=0; i<fields.length; i++) { 
    Class type = fields[i].getType(); 
    process(fields[i]); 
} 

// By obtaining a particular Field object. 
// This example retrieves java.awt.Point.x. 
try { 
    Field field = cls.getField("x"); 
    process(field); 
    } catch (NoSuchFieldException e) { 
} 

より多くのオプションのためのClassクラスの定義を参照してください。

関連する問題