Javaでクラスメンバーをループすることは可能ですか?

StackOverflow https://stackoverflow.com/questions/1652525

  •  22-07-2019
  •  | 
  •  

質問

私は、多数のメンバーがいるDTOを持っています。 Javaがクラスのfor(in)のアイデアをサポートしているかどうか疑問に思っていました。私はそうは思わないが、もしそうなら、それは私に多くの悲しみを救うだろうので、私はそこに質問を投げるだろうと思った。

役に立ちましたか?

解決

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

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

(またはメソッドなどに相当するもの)

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

他のヒント

それでも、少し面倒です。

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

参照: 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) {
 }

クラスクラスを参照その他のオプションの定義。

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

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

リフレクションフレームワークを見て、この情報についてクラスをイントロスペクトできます。

http:/ /java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/package-summary.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top