我们使用以下代码获取变量名称
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());
}
}
}
但是某些对象包含另一个对象,例如
class A{
String a="nil";
B b;
}
class B{
int n1=0;
}
如何获取对象b可变细节?
如何获取自定义列表类名和对象?
假设我们不知道类名和内部对象名
答案 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);
}
}
}
}
}