Java 从反射中获取字段的类名
我在这件事上兜圈子 我有一个班上的人Java 从反射中获取字段的类名,java,reflection,Java,Reflection,我在这件事上兜圈子 我有一个班上的人 public class Person { String name = ""; } 现在,我想反省一下这个类实例&弄清楚名称声明为什么类 因此,name=String或java.lang.String 这是我的代码: “this”是Person的一个实例 try { String className = this.getClass().getName(); Class cls = Class.forName(className);
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);
}
试试看{
String className=this.getClass().getName();
Class cls=Class.forName(className);
字段字段列表[]=cls.getDeclaredFields();
对于(int i=0;i
我设法找到了一个说明:
类java.lang.String
但我需要它是“java.lang.String”
有什么想法吗?试试。。getType()然后是getName()
编辑:(绿色日评论之后)——请注意
fld.getType().getCanonicalName()
在大多数情况下会给出相同的输出。使用内部类时,输出是不同的。这是来自搜索的信息。根据需要对classname执行的操作,可以选择getName()或getCanonicalName()中的一个
结果:
3. java.lang.String
我想我解决了
本应这样做:
String stype = fld.getType().getName();
我通过调用这个函数得到了一个字段的类名
f、 getDeclaringClass().getSimpleName()它是在类的toString方法中给出的,它是这样写的,“Class Your Class name”谢谢大家,但是.getName()在我工作的情况下更可靠。这实际上是不正确的,因为
f.getDeclaringClass()
返回已声明字段的类的类型,而不是字段类型本身f.getType()
是正确答案。
3. java.lang.String
String stype = fld.getType().getName();