Sí, absolutamente lo es, suponiendo que tenga los permisos de seguridad adecuados. Use Field.setAccessible(true)
primero si accede desde una clase diferente.
import java.lang.reflect.*;
class Other
{
private String str;
public void setStr(String value)
{
str = value;
}
}
class Test
{
public static void main(String[] args)
// Just for the ease of a throwaway test. Don't
// do this normally!
throws Exception
{
Other t = new Other();
t.setStr("hi");
Field field = Other.class.getDeclaredField("str");
field.setAccessible(true);
Object value = field.get(t);
System.out.println(value);
}
}
Y no, normalmente no deberías hacer esto ... está subvirtiendo las intenciones del autor original de la clase. Por ejemplo, puede haber una validación aplicada en cualquier situación donde el campo puede normalmente establecerse, u otros campos pueden cambiarse al mismo tiempo. Estás efectivamente violando el nivel de encapsulación deseado.
La pregunta habría mejorado mucho si incluía "Probé esto ..." con el código en cuestión. – duffymo
La pregunta es una tontería: se ha preguntado y respondido algunas veces –