Java获取对象变量名称并获取内部对象变量名称

时间:2018-05-06 13:20:35

标签: java android

我们使用以下代码获取变量名称

public void printFieldNames(Object obj, Foo... foos) {
List<Foo> fooList = Arrays.asList(foos);
for(Field field : obj.getClass().getFields()) {
     if(fooList.contains(field.get()) {
          System.out.println(field.getName());
     }
  }
}

from

但是某些对象包含另一个对象,例如

class A{
 String a="nil";
 B b;
}
class B{
int n1=0;
}

如何获取对象b可变细节?
如何获取自定义列表类名和对象?
假设我们不知道类名和内部对象名

,我们需要得到任何对象细节

1 个答案:

答案 0 :(得分:1)

我已经通过添加一些构造函数来完成代码,但除此之外它应该是相同的。

package com.example.demo;

import java.lang.reflect.Field;

public class TestMain {

    public class A {
        public String a = "nil";
        public B b;

        public A(String a, B b) {
            super();
            this.a = a;
            this.b = b;
        }
    }

    public class B {
        public int n1 = 0;

        public B(int n1) {
            super();
            this.n1 = n1;
        }
    }

    public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
        TestMain test = new TestMain();
        B b = test.new B(10);
        A a = test.new A("Test", b);
        for (Field field : a.getClass().getDeclaredFields()) {
            field.setAccessible(true);
            String name = field.getName();
            Object value = field.get(a);
            if (value instanceof B) {
                B bV = (B) value;
                for (Field fieldB : bV.getClass().getDeclaredFields()) {
                    fieldB.setAccessible(true);
                    String name1 = fieldB.getName();
                    Object value1 = fieldB.get(b);
                    System.out.printf("Field name: %s, Field value: %s%n", name1, value1);
                }
            }
        }
    }
}