我在课堂上检索字段类型时遇到问题。
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**
如何以正确的格式获取属性类型?
答案 0 :(得分:2)
你做不到。数组'toString()
方法使用[X
约定。您可以创建自己的实用程序,它将执行您想要的操作。像
public class ArrayUtils {
public static String toClassName(Class<?> clazz) {
if (clazz.isArray()) {
return clazz.getComponentType().getName() + "[]";
} else {
return clazz.getName();
}
}
}
更新:PéterTörök将此作为答案添加,但随后将其删除。实际上,您可以使用getCanonicalName()
而不是getName()
。该方法大致与实用方法相关,即它会给你你想要的东西。但是如果你想要更好地控制表示,你仍然可以拥有你的实用程序类(例如,想要在某些时候省略FQN等)。
答案 1 :(得分:0)
晦涩的短语
[Ljava.lang.String
是其中的具体类型 数组,其中[L
表示它是引用类型的数组java.lang.String
是数组的组件类型。
摘录自Java Generics and Collections Maurice Naftalin, Philip Wadler,由O'Reilly
出版