2009-10-30 85 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類定義了更多的選擇。

相關問題