Если вы контролируете SecurityManager
или его нет, вы можете использовать Reflection, чтобы сделать поле доступным, а затем изменить его значение.
Пример кода:
import java.lang.reflect.Field;
public class ModifyProtectedFieldSample {
public static void setProtectedField(final Object targetClass,
final String fieldName,
final Object value) {
try {
final Field field = targetClass.getClass().getDeclaredField(fieldName);
if (!field.isAccessible()) {
field.setAccessible(true);
}
field.set(targetClass, value);
} catch (NoSuchFieldException e) {
System.out.println("NoSuchFieldException " + e);
} catch (SecurityException e) {
System.out.println("SecurityException"+ e);
} catch (IllegalAccessException e) {
System.out.println("IllegalAccessException"+ e);
}
}
public static void main(final String[] args) {
setProtectedField(String.class, "someFieldName", Boolean.FALSE);
}
}