我围着这个转了一圈.
我有一个人类,例如
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”
有任何想法吗?
解决方法:
尝试.. getType()然后getName()
fld.getType().getName()
编辑:( Aften Green Days’评论) – 请注意
在大多数情况下,fld.getType().getCanonicalName()将提供相同的输出.使用内部类时输出不同.这是link来自搜索.根据您对classname的需要,您可以选择getName()或getCanonicalName()之一
标签:java,reflection
来源: https://codeday.me/bug/20190902/1791796.html