javaclassfield

Loop over all fields in a Java class


I have a Java class that has a number of Fields.

I would like to Loop over al lthe fields and do something for the one's that are null.

For example if my class is:

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

In another location, I'd make a ClassWithStuff object and I would like to go though all the fields in the class. Kind of like this:

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

Is there any way for me to achieve this?


Solution

  • Use getDeclaredFields on [Class]

    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)