8

たくさんのメンバーがいるDTOがあります。Javaがクラスのfor(in)のアイデアをサポートしているかどうか疑問に思いました。そうは思わないが、そうすればかなりの悲しみを救うことができるので、そこに質問を投げかけると思った。

4

5 に答える 5

26

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

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

(またはメソッドなどの同等のもの)

次に、特定のインスタンスのフィールド値または静的な値を取得できます。

于 2009-10-30T21:53:51.677 に答える
7

でも、少し面倒です。

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

参照:Class.getDeclaredFieds()

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

ここで例を見ることができます

ClassオブジェクトからFieldオブジェクトを取得する方法は3つあります。

 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) {
 }

その他のオプションについては、クラスクラスの定義を参照してください。

于 2009-10-30T21:56:55.693 に答える
4

はい、ReflectionAPIを使用してください。特に、からgetFieldsgetMethodsメソッドを確認してくださいClass

于 2009-10-30T21:53:33.757 に答える
0

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

たぶん、なぜそのDTOに非常に多くのメンバーがいるので、これが必要だと思うのかを自問する必要があります。リファクタリングする時間かもしれません。

于 2009-10-30T21:53:42.290 に答える
0

この情報についてクラスを内省できるリフレクションフレームワークを見てください。

https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/reflect/package-summary.html

于 2009-10-30T21:54:02.847 に答える