遍历 Java 类中的所有字段

新手上路,请多包涵

我有一个 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
}

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

原文由 CodyBugstein 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 799
2 个回答

在 [Class] 上使用 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 )

原文由 Zim-Zam O’Pootertoot 发布,翻译遵循 CC BY-SA 4.0 许可协议

是的,有反思。

使用 Class 对象访问 Field 对象 getFields() 方法。

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

然后遍历字段。这是有效的,因为您声明的所有字段都是 public 。如果不是,则使用 getDeclaredFields() Fields 它访问所有直接在类上声明的 public or not545b-

原文由 rgettman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题