Using reflection to change the accessibility of a private object field and access it at runtime.
import java.lang.reflect.Field; class Life { private int meaning = 42; } class Hack { public static void main(String args[]){ Life life = new Life(); try { Field field = life.getClass().getDeclaredField("meaning"); field.setAccessible(true); System.out.println(field.get(life)); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e){ e.printStackTrace(); } } }
Output:
42




Fácil assim?
Dá pra violar as regras de orientação a objeto dessa maneira?
É receita garantida? Não tem jeito de evitar?
Sim, metaprogramação em Java, meio burocrática mas bem completa.
IHMO, eu tenho a tese de que essa coisa toda de privada/protegido não faz muito sentido nem é tem muita utilidade prática, e que na verdade reflete a maneira de pensar corrente (privativo e protecionista) no momento da criação desses conceitos.