Considerate questo esempio:Perché è consentito accedere ai campi privati Java tramite riflessione?
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args) {
C c = new C();
try {
Field f = C.class.getDeclaredField("a");
f.setAccessible(true);
Integer i = (Integer)f.get(c);
System.out.println(i);
} catch (Exception e) {}
}
}
class C {
private Integer a =6;
}
Sembra illogico che si è permesso di accedere ai campi privati di classi con la riflessione. Perché questa funzionalità è disponibile? Non è "pericoloso" consentire tale accesso?
+1 per "scopeing, non per sicurezza". – skaffman
+1 perfettamente a destra privato è un suggerimento per gli altri programmatori che non dovrebbero preoccuparsi del membro per mantenere la classe in esecuzione. Ti dà la possibilità di ordinare il tuo codice in alcuni contratti e fare in modo che il compilatore verifichi che non scrivi direttamente o leggi quei membri. Ma se devi rompere il contratto puoi farlo perché un linguaggio di programmazione non deve ostacolare il programmatore, anche se vuole spararsi al ginocchio. – Janusz
quindi, tutto sommato, incapsulamento o dovrei dire: il data hiding riguarda lo scpoing e nulla a che fare con la sicurezza, anche se stai fornendo le tue API come jar di terze parti –