2011-01-13 83 views
0

我在課堂中回顧字段類型時遇到問題。Java反射,獲取屬性名稱和類型

class Test { 
    public int x; 
    public int[] y; 
    public String[] names; 
} 

public class Main { 
    static void main(String[] args) { 
        try { 
            printAttributes(Class.forName("Test")); 
        } 
        catch(Exception ex){} 
    } 

    static void printAttributes(Class clazz) { 
        Field[] fields=clazz.getFields(); 
        for (int i = 0; i < fields.length; i++) { 
            System.out.println(fields[i].getType().getName().toString()+" "+ fields[i].getName().toString()); 
        } 
    } 
} 

輸出

int x //its OK 
[I y //I need **int[] y** 
[Ljava.lang.String; names //I need **java.lang.String[] names** 

我怎樣才能得到正確格式的屬性類型?

回答

2

你不能。數組'toString()方法使用[X約定。你可以創建你自己的工具,它會做你想做的。像

public class ArrayUtils { 
    public static String toClassName(Class<?> clazz) { 
     if (clazz.isArray()) { 
      return clazz.getComponentType().getName() + "[]"; 
     } else { 
      return clazz.getName(); 
     } 
    } 
} 

更新:彼得Török加入這個作爲答案,但隨後刪除了它。事實上,您可以使用getCanonicalName()而不是getName()。該方法大致上是關於實用方法的功能,即它會給你你想要的。但是如果您想要更好地控制表示(例如,希望在某點忽略FQN等),仍然可以使用實用程序類。

+0

發表雅就開始工作了很多感謝 – 2011-01-13 15:18:06

相關問題