遍历 Java 类中的所有字段

2022-09-01 08:52:03

我有一个Java类,它有许多.Fields

我想遍历所有字段,并为空字段做一些事情。

例如,如果我的类是:

public class ClassWithStuff {
    public int inty;
    public stringy;         
    public Stuff;
    //many more fields
}

在另一个位置,我会做一个对象,我想遍历类中的所有字段。有点像这样:ClassWithStuff

for (int i = 0; i < ClassWithStuff.getFields().size(); i++) {
      //do stuff with each one
}

我有什么办法可以做到这一点吗?


答案 1

用于 [类]getDeclaredFields

ClasWithStuff myStuff = new ClassWithStuff();
Field[] fields = myStuff.getClass().getDeclaredFields();
for(Field f : fields){
   Class t = f.getType();
   Object v = f.get(myStuff);
   if(t == boolean.class && Boolean.FALSE.equals(v)) 
     // found default value
   else if(t.isPrimitive() && ((Number) v).doubleValue() == 0)
     // found default value
   else if(!t.isPrimitive() && v == null)
     // found default value
}

(http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html)


答案 2

是的,有反思。

使用该对象通过 getFields() 方法访问对象。ClassField

Field[] fields = ClassWithStuff.class.getFields();

然后循环访问字段。这有效,因为您声明的所有字段都是 。如果不是,则使用 getDeclaredFields(),它访问所有直接在类上声明的内容,或者不访问。publicFieldspublic