我绕圈子走了一圈。
我有一个人类,例如
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);
}
我设法找到了一个声明:
的部分class java.lang.String
但我需要它是“java.lang.String”
有什么想法吗?
答案 0 :(得分:4)
尝试.. getType()然后getName()
fld.getType().getName()
编辑:( Aften Green Days'评论) - 请注意
在大多数情况下,fld.getType().getCanonicalName()
会提供相同的输出。使用内部类时输出不同。以下link来自搜索。根据您对classname的需要,您可以选择getName()或getCanonicalName()
答案 1 :(得分:2)
System.out.println("3. " + fld.getType().getCanonicalName());
结果:
3. java.lang.String
答案 2 :(得分:0)
我想我解决了,
应该这样做:
String stype = fld.getType().getName();
答案 3 :(得分:-1)
我通过调用它获得了字段的类名 f.getDeclaringClass()。getSimpleName()