2009-10-30 75 views
8

我有一个DTO,有一大堆成员。我想知道Java是否支持为这个类提供一个for(in)的想法。我不认为它确实如此,但如果确实如此,它会为我节省很多痛苦,所以,我想我会把问题抛出去。是否有可能通过java中的类成员循环?

+0

什么是DTO? – CodyBugstein 2013-06-13 19:27:56

+1

您对3.5年前回答的问题提出这个问题? DTO是用于表示数据集的对象,通常与推论数据库表相关联。我在这里和Spring一起使用。我认为它在大多数JDBC情况下都被使用。 – 2013-06-13 23:39:48

+0

事实上,我是:)在永恒的网络空间中,更大的计划中的3.5年是什么?感谢您的回答。 – CodyBugstein 2013-06-14 15:24:27

回答

26

好了,你可以用反射做到这一点:

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

(或者类似的方法等)

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

+0

+1为简明。 – 2009-10-30 22:04:24

+0

非常感谢。谢谢。 – 2009-10-30 22:18:10

4

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

0

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

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

7

这样做,有点麻烦,但。

你必须使用反射。

参见:Class.getDeclaredFieds()

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

可以看到一个例子here

有三种获取字段的方法来自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类定义了更多的选择。

相关问题