views:

296

answers:

3

Hey anyone, I got a question about Java Reflections: I have to checkout, if a certain field of a class is an array. But my problem is: If i run isArray() on the attribute of the class directly, it works. But if I use it in the way below, it won"t work. I guess because the "real" array is in this Field class? Any idea how i get it to work - I think there is missing a cast or sth like that? Thanks!

Field fields[] = object.getClass().getDeclaredFields();

for (Field field : fields) {
    if (field.getClass().isArray()) {
        //Always false.
    }
}
+6  A: 

field.getType()!

kd304
A: 

You are testing the individual elements of Fields, rather than the array itself.

Visage
Sorry I don't understand this at all. "Elements of Fields?" Arrays have elements. Fields don't.
finnw
'fields' as in the variable 'fields'.
Visage
+4  A: 

Your code should read

Field fields[] = obj.getClass().getDeclaredFields();

for(Field field : fields) {
  if(field.getType().isArray()){
     //Actually works
  }
}

Using field.getClass() as you are will always return Field.class or a Class instance of a subclass of Field*.

*My apologizes for such a confusingly worded sentence.

Kevin Montrose