从反射获取字段的类名

2024-02-08

我在这件事上兜圈子。

我有一个类 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(使用前将#替换为@)

从反射获取字段的类名 的相关文章

随机推荐