2013-03-25 95 views
3

我在Java中使用反射。用Java反射顯示字段類型

這裏是我的代碼:

public String getClassFields(Class aClass) 
    { 
    String ClassFields = ""; 
    Field[] Fields = aClass.getDeclaredFields(); 
    boolean isPublic; 
    String separator = System.getProperty("line.separator"); 
    for (Field f : Fields) 
    { 
    isPublic = Modifier.isPublic(f.getModifiers()); 
    if (isPublic) 
     ClassFields += "public " + f.getType() + " " + f.getName() + separator; 
    else 
     ClassFields += "private " + f.getType() + " " + f.getName() + separator; 
    }  
    return ClassFields; 

}

如果是在類中的字段如下:

private int Diameter; 
private Colour Colour; 

我在上面發佈的代碼返回如下:

private int Diameter 
private class Colour Colour 

何W能修改我的代碼從行刪除其他「類」字:

private class Colour Colour 
+0

用''class''調用'replace',''「'? – Patashu 2013-03-25 05:45:16

回答

3

現在,你得到的默認字符串表示,由Class#toString()提供:

的對象轉換到一個字符串。字符串表示形式是字符串「class」或「interface」,後跟一個空格,然後是由getName返回格式的類的完全限定名稱。如果這個Class對象表示一個基元類型,則此方法返回基元類型的名稱。如果這個Class對象表示void,則此方法返回「void」。

所以你想使用不同的方法來獲取類的名稱。更改

f.getType() 

((Class) f.getType()).getName() 
// or 
((Class) f.getType()).getSimpleName() 

邊注:不要在這樣一個循環執行字符串連接。因爲每次都需要複製字符串,導致二次(O(n^2))漸近運行時。改爲使用StringBuilder

0

您可以試試以下內容。

MyClass類=的Class.forName( 「類名」); //你的類名

領域[]字段= myClass.getDeclaredFields();

爲(場F:字段) {

的System.out.println( 「字段爲」 + F);

System.out.println(「Only Field Name」+ f.getName());

}

你明白了我的觀點。