28

I'm trying to write a method that will get a private field in a class using reflection.

Here's my class (simplified for this example):

public class SomeClass {
    private int myField;

    public SomeClass() {
        myField = 42;
    }

    public static Object getInstanceField(Object instance, String fieldName) throws Throwable {
        Field field = instance.getClass().getDeclaredField(fieldName);
        return field.get(instance);
    }
}

So say I do this:

SomeClass c = new SomeClass();
Object val = SomeClass.getInstanceField(c, "myField");

I'm getting an IllegalAccessException because myField is private. Is there a way to get/set private variables using reflection? (I've done it in C#, but this is the first time I've tried it in Java). If you're wondering why there is the need to do such madness :), it's because sometimes during unit testing it's handy to set private variables to bogus values for failure testing, etc.

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
dcp
  • 54,410
  • 22
  • 144
  • 164

1 Answers1

33

Figured it out. Need

field.setAccessible(true);
dcp
  • 54,410
  • 22
  • 144
  • 164