2012-03-30 38 views
1
Field[] fields = <class name>.getClass().getDecdlaredFields(); 
for(Field field: fields) { 
    String fieldName = field.getName(); 
    log.info(" Fieldname : "+ fieldName); 
} 

這是給我的名建設者與隨機字符像這樣的領域:獲得一類

CGLIB$getPTI$25 
CGLIB$setPTI$26 

這裏的類實際上是一個Hibernate映射類。它映射來自數據庫的數據。

+0

它工作正常 – 2012-03-30 05:53:53

回答

3

它們不是隨機個字符。它們是所討論的類所宣佈的字段,可能是自動生成的。在機器生成的代碼中使用$很常見(甚至被JLS鼓勵)。

請注意CGLIB是一個代碼生成庫,它大概是在這裏創建類的。

現在,如果您認爲您正在查看類之一,那麼您並不是 - 您正在查看由Hibernate實時創建的子類。打印出foo.getClass().getName()即可看到。如果您正在嘗試查找中聲明的字段,則需要繼續繼承層次結構,直到到達您的課程。 (查看生成的類是什麼樣子,看看如何,當你有你的真實的檢測。)

+0

是什麼25和26在輸出? – 2012-03-30 05:51:56

+0

@ChandraSekhar:我不知道如何 - 你必須看看使用CGLIB來生成這些字段的代碼。很可能有一些計數器用於保證生成的名稱是唯一的。 – 2012-03-30 05:52:59

+0

這是該課程中的字段編號 – 2012-03-30 05:56:07

0

這將幫助你....

String className = your_class_name; 
Class<?> objectClass = Class.forName(className);  
Field [] fieldsObjs = objectClass.getDeclaredFields(); 

for(int i=0;i<fieldsObjs.length;i++){ 
     system.out.println("className : " + fieldsObjs[i].getName()); 
}