8

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

4

5 回答 5

26

好吧,您可以通过反射来做到这一点:

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

(或方法等的等价物)

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

于 2009-10-30T21:53:51.677 回答
7

确实如此,虽然有点麻烦。

你必须使用反射。

请参阅:Class.getDeclaredFieds()

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

你可以在这里看到一个例子

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

于 2009-10-30T21:56:55.693 回答
4

是的,使用反射 API。特别是,检查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 回答