Java Reflection Field Set setFieldEditable(Class clazz, String fieldName)

Here you can find the source of setFieldEditable(Class clazz, String fieldName)

Description

Sets a field in a class to be modifiable regardless of finality or privacy

License

Open Source License

Parameter

Parameter Description
clazz The class to modify
fieldName The name of the field to modify

Return

the modified field

Declaration

public static Field setFieldEditable(Class<?> clazz, String fieldName) 

Method Source Code

//package com.java2s;
/**/*from w  ww.j a v a 2s . co  m*/
 * Helios, OpenSource Monitoring
 * Brought to you by the Helios Development Group
 *
 * Copyright 2014, Helios Development Group and individual contributors
 * as indicated by the @author tags. See the copyright.txt file in the
 * distribution for a full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 
 *
 */

import java.lang.reflect.Field;

import java.lang.reflect.Modifier;

public class Main {
    /**
     * Sets a field in a class to be modifiable regardless of finality or privacy
     * @param clazz The class to modify
     * @param fieldName The name of the field to modify
     * @return the modified field
     */
    public static Field setFieldEditable(Class<?> clazz, String fieldName) {
        try {
            Field targetField = clazz.getDeclaredField(fieldName);
            Field modifierField = Field.class.getDeclaredField("modifiers");
            targetField.setAccessible(true);
            modifierField.setAccessible(true);
            modifierField.setInt(targetField, targetField.getModifiers() & ~Modifier.FINAL);
            return targetField;
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }
}

Related

  1. setField(T object, Field field, ResourceBundle bundle)
  2. setFieldAccessible(Class clazz, String... names)
  3. setFieldAccessible(Field field)
  4. setFieldBySomeMethod(List setMethods, Object object, Object value)
  5. setFieldContent(final Object obj, final String name, final Object value)
  6. setFieldForAnnotation(Object target, Class annotation, Object value)
  7. setFieldHelper(Object o, String name, Object v)
  8. setFieldIfExists(final Object instance, final String fieldName, final Object value)
  9. setFieldObject(Class clazz, String field, Object object, Object newObj)