2011-01-13 81 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

相关问题