是否可以循环遍历java中的类成员?

时间:2009-10-30 21:51:46

标签: java dto

我有一个拥有大量成员的DTO。我想知道Java是否支持类的for(in)的想法。我不认为这样做,但如果确实如此,它会给我带来很多的悲伤,所以,我想我会把问题抛到那里。

5 个答案:

答案 0 :(得分:26)

嗯,你可以用反射来做到这一点:

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

(或等同于方法等)

然后,您可以获取特定实例的字段值或静态值。

答案 1 :(得分:7)

确实如此,这有点麻烦。

你必须使用反射。

请参阅:Class.getDeclaredFieds()

  

返回一个Field对象数组,反映由此Class对象表示的类或接口声明的所有字段

您可以看到示例here

  

从Class对象获取Field对象有三种方法。

 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类定义。

答案 2 :(得分:4)

是的,请使用Reflection API。特别是,请检查Class中的getFieldsgetMethods方法。

答案 3 :(得分:0)

您可以使用反射来获取所有成员和函数。

也许您需要问问自己为什么DTO会有这么多成员,您认为这是必要的。可能是重构的时候了。

答案 4 :(得分:0)

看一下反思框架,你可以在这个反思框架内反省这些信息。

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