public boolean isAccessible () { return field.isAccessible(); }
public boolean isAccessible () { return field.isAccessible(); }
private void injectField(Object newVal) throws IllegalAccessException { Object bean = beanRef.get(); if (bean == null) { return; } boolean accessible = field.isAccessible(); field.setAccessible(true); field.set(bean, newVal); field.setAccessible(accessible); }
/** * Make the given field accessible, explicitly setting it accessible if * necessary. The {@code setAccessible(true)} method is only called * when actually necessary, to avoid unnecessary conflicts with a JVM * SecurityManager (if active). * @param field the field to make accessible * @see java.lang.reflect.Field#setAccessible */ @SuppressWarnings("deprecation") // on JDK 9 public static void makeAccessible(Field field) { if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) { field.setAccessible(true); } }
public static Field findField(Class<?> originClazz, String name) throws NoSuchFieldException { for (Class<?> clazz = originClazz; clazz != null; clazz = clazz.getSuperclass()) { try { Field field = clazz.getDeclaredField(name); if (!field.isAccessible()) { field.setAccessible(true); } return field; } catch (NoSuchFieldException e) { // ignore and search next } } throw new NoSuchFieldException("Field " + name + " not found in " + originClazz); }
/** * 改变private/protected的成员变量为可访问,尽量不进行改变,避免JDK的SecurityManager抱怨。 */ public static void makeAccessible(Field field) { if (!field.isAccessible() && (!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier.isFinal(field.getModifiers()))) { field.setAccessible(true); } }
public static <T extends Annotation> T getAnnotation(Class<?> clazz, String fieldName, Class<T> annotationClass) { try { Field field = getDeclaredField(clazz, fieldName); if (!field.isAccessible()) { field.setAccessible(true); } return field.getAnnotation(annotationClass); } catch (NoSuchFieldException e) { return null; } }
public static <T> T getField(Object obj, String fieldName) { try { Field field = getDeclaredField(obj.getClass(), fieldName); if (!field.isAccessible()) { field.setAccessible(true); } return (T) field.get(obj); } catch (Exception e) { throw new IllegalArgumentException(e); } }
public static void setField(Object obj, String fieldName, Object value) { try { Field field = getDeclaredField(obj.getClass(), fieldName); if (!field.isAccessible()) { field.setAccessible(true); } field.set(obj, value); } catch (Exception e) { throw new IllegalArgumentException(e); } }
public static <T extends Annotation> T getAnnotation(Class<?> clazz, String fieldName, Class<T> annotationClass) { try { Field field = getDeclaredField(clazz, fieldName); if (!field.isAccessible()) { field.setAccessible(true); } return field.getAnnotation(annotationClass); } catch (NoSuchFieldException e) { return null; } }
public static <T> T getField(Object obj, String fieldName) { try { Field field = getDeclaredField(obj.getClass(), fieldName); if (!field.isAccessible()) { field.setAccessible(true); } return (T) field.get(obj); } catch (Exception e) { throw new IllegalArgumentException(e); } }
public static void setField(Object obj, String fieldName, Object value) { try { Field field = getDeclaredField(obj.getClass(), fieldName); if (!field.isAccessible()) { field.setAccessible(true); } field.set(obj, value); } catch (Exception e) { throw new IllegalArgumentException(e); } }
Object readResolve() { Class<?> clazz = _serialization.clazz; try { Field f = clazz.getDeclaredField(_serialization.name); // 06-Oct-2012, tatu: Has "lost" its security override, may need to force back if (!f.isAccessible()) { ClassUtil.checkAndFixAccess(f, false); } return new AnnotatedField(null, f, null); } catch (Exception e) { throw new IllegalArgumentException("Could not find method '"+_serialization.name +"' from Class '"+clazz.getName()); } }
Object readResolve() { Class<?> clazz = _serialization.clazz; try { Field f = clazz.getDeclaredField(_serialization.name); // 06-Oct-2012, tatu: Has "lost" its security override, may need to force back if (!f.isAccessible()) { ClassUtil.checkAndFixAccess(f, false); } return new AnnotatedField(null, f, null); } catch (Exception e) { throw new IllegalArgumentException("Could not find method '"+_serialization.name +"' from Class '"+clazz.getName()); } }
try { Field field = Throwable.class.getDeclaredField("detailMessage"); if (!field.isAccessible()) { field.setAccessible(true);
try { Field field = Throwable.class.getDeclaredField("detailMessage"); if (!field.isAccessible()) { field.setAccessible(true);
@Test public void testRemoveFinalModifier() throws Exception { final Field field = StaticContainer.class.getDeclaredField("IMMUTABLE_PRIVATE_2"); assertFalse(field.isAccessible()); assertTrue(Modifier.isFinal(field.getModifiers())); FieldUtils.removeFinalModifier(field); // The field is no longer final assertFalse(Modifier.isFinal(field.getModifiers())); assertFalse(field.isAccessible()); }
@Test public void testRemoveFinalModifierAccessNotNeeded() throws Exception { final Field field = StaticContainer.class.getDeclaredField("IMMUTABLE_PACKAGE"); assertFalse(field.isAccessible()); assertTrue(Modifier.isFinal(field.getModifiers())); FieldUtils.removeFinalModifier(field, false); // The field is no longer final AND we did not need to force access assertTrue(Modifier.isFinal(field.getModifiers())); assertFalse(field.isAccessible()); }
@Test public void testRemoveFinalModifierWithAccess() throws Exception { final Field field = StaticContainer.class.getDeclaredField("IMMUTABLE_PRIVATE_2"); assertFalse(field.isAccessible()); assertTrue(Modifier.isFinal(field.getModifiers())); FieldUtils.removeFinalModifier(field, true); // The field is no longer final assertFalse(Modifier.isFinal(field.getModifiers())); assertFalse(field.isAccessible()); }
@Test public void testRemoveFinalModifierWithoutAccess() throws Exception { final Field field = StaticContainer.class.getDeclaredField("IMMUTABLE_PRIVATE_2"); assertFalse(field.isAccessible()); assertTrue(Modifier.isFinal(field.getModifiers())); FieldUtils.removeFinalModifier(field, false); // The field is STILL final because we did not force access assertTrue(Modifier.isFinal(field.getModifiers())); assertFalse(field.isAccessible()); }