我在这件事上兜圈子。
我有一个类 Person,例如
public class Person {
String name = "";
}
现在,我想内省这个类实例并弄清楚类的名称声明为什么。
所以,name = String 或 java.lang.String
这是我的代码:
“this”是 Person 的一个实例。
try {
String className = this.getClass().getName();
Class cls = Class.forName(className);
Field fieldlist[] = cls.getDeclaredFields();
for (int i = 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
int mod = fld.getModifiers();
System.out.println("1. " + fld.toGenericString());
System.out.println("2. " + fld.getName());
System.out.println("3. " + fld.getGenericType() + "]");
Object oj = fld.getType();
// Says that 4: class java.lang.String
System.out.println("4: " + oj.toString());
Class c1 = oj.getClass();
// Should throw Exception
String stype = c1.getDeclaringClass().toString();
System.out.println("5. " + stype);
}
}
catch (Throwable e) {
System.err.println(e);
}
我设法到达这样的部分:
类 java.lang.String
但我需要它是“java.lang.String”
有任何想法吗?
尝试.. getType() 然后 getName()
fld.getType().getName()
编辑:(绿日的评论之后)--请注意fld.getType().getCanonicalName()
在大多数情况下会给出相同的输出。使用内部类时,输出会有所不同。这是link http://www.cognitus.net/html/tutorial/reflection/sec_2_1.html来自搜索。根据您需要对类名执行的操作,您可以选择 getName() 或 getCanonicalName() 之一
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)