Check if a field is final in java using reflection

I'm writing a class, which at some point has to have all its Fields assigned from another item of this class.

I did it through reflection:

for (Field f:pg.getClass().getDeclaredFields()) {
    f.set(this, f.get(pg));
}

The problem is, that this class contains a Field, which is final. I could skip it by name, but to me that seems not elegant at all.

What's the best way to check if a Field is final in java using reflection?


Solution 1:

The best and only one way is: Modifier.isFinal(f.getModifiers())

Reference:

  • Field.getModifiers
  • Modifier.isFinal

Solution 2:

You can use getModifiers() method on the Field variable:

if ((f.getModifiers() & Modifier.FINAL) == Modifier.FINAL)
{
    //this is final field
}