ReflectionHelper.java Source code

Java tutorial

Introduction

Here is the source code for ReflectionHelper.java

Source

//package tester.utilities;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

import sun.reflect.FieldAccessor;
import sun.reflect.ReflectionFactory;

/**
 * This class can be used to set field values regardless of the modifiers.
 * 
 * @author Weston Jossey
 * @since Feb 1 2009
 */
public class ReflectionHelper {

    private static final String MODIFIERS_FIELD = "modifiers";

    private static final ReflectionFactory reflection = ReflectionFactory.getReflectionFactory();

    /**
     * Set the value of the field of the object to the given value.
     * 
     * @param original
     *            object to modify
     * @param field
     *            field to modify
     * @param value
     *            new value for the given object and field
     * @throws NoSuchFieldException
     * @throws IllegalAccessException
     */
    public static void setStaticFinalField(Object original, Field field, Object value)
            throws NoSuchFieldException, IllegalAccessException {
        // we mark the field to be public
        field.setAccessible(true);
        // next we change the modifier in the Field instance to
        // not be final anymore, thus tricking reflection into
        // letting us modify the static final field
        Field modifiersField = Field.class.getDeclaredField(MODIFIERS_FIELD);
        modifiersField.setAccessible(true);
        int modifiers = modifiersField.getInt(field);
        // blank out the final bit in the modifiers int
        modifiers &= ~Modifier.FINAL;
        modifiersField.setInt(field, modifiers);
        FieldAccessor fa = reflection.newFieldAccessor(field, false);
        fa.set(original, value);
    }
}