通过反思获得第一个父母的字段

Luc*_*ore 9 java reflection

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

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

我的类结构与此类似:

class A
{
    int x;
}

class B extends A
{
    int y;
}

class C extends B
{
    int z;
}
Run Code Online (Sandbox Code Playgroud)

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

Dej*_*kic 16

Luchian使用getSuperclass()方法获取对Class对象的引用,该Class对象表示相关对象的超类类型.之后,您可以轻松地以与示例相同的方式获取字段.


Pet*_*rey 8

创建一个方法

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);
Run Code Online (Sandbox Code Playgroud)

或使用循环

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.
  }
}
Run Code Online (Sandbox Code Playgroud)