通过反射获取第一个父项的字段

2022-09-03 10:09:56

我正在尝试获取对象的第一个父项的字段和值。我目前的代码是这样的:

Class<? extends Object> cls = obj.getClass();
Field[] fields = cls.getDeclaredFields();
for ( Field field : fields )
{
    String fieldName = field.getName();
    String fieldValue = field.get(obj);
}

我的类结构类似于:

class A
{
    int x;
}

class B extends A
{
    int y;
}

class C extends B
{
    int z;
}

现在,我将一个 C 对象传递给该方法,我想从 C 和 B 中获取所有字段,但不能从 A 中获取。有没有办法做到这一点(使用反射,我不想实现其他方法)?


答案 1

Luchian,使用 getSuperclass() 方法获取对 Class 对象的引用,该对象表示所讨论对象的超类类型。之后,您将很容易像在示例中那样获取字段。


答案 2

创建方法

public static void printFieldsFor(Class cls, Object obj) {
  Field[] fields = cls.getDeclaredFields();
  for ( Field field : fields ) {
    String fieldName = field.getName();
    String fieldValue = field.get(obj);
  }
}

printFieldsFor(object.getClass(), obj);
printFieldsFor(object.getClass().getSuperclass(), obj);

或使用循环

for(Class cls = object.getClass(); 
    cls!=null && cls!=A.class; 
    cls = cls.getSuperclass()) {
  for(Field field : cls.getDeclaredFields()) {
     String fieldName = field.getName();
     String fieldValue = field.get(obj);
     // do something with the field.
  }
}