Рассмотрим следующий пример:Почему для доступа к частным полям Java через отражение?
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;
}
Это кажется нелогичным, что вам позволено получить доступ к частным поля классов с отражением. Почему такая функциональность доступна? Разве не «опасно» разрешить такой доступ?
+1 для «для определения области, а не для безопасности». – skaffman
+1 совершенно правильный частный - это намек для других программистов, что они не должны заботиться о члене, чтобы поддерживать класс. Это дает вам возможность сортировать код в некоторых контрактах и компилятор проверяет контракт, что вы прямо не пишете или не читаете эти члены. Но если вам нужно разорвать контракт, вы можете это сделать, потому что язык программирования не должен стоять на пути программиста, даже если он хочет застрелить себя в колене. – Janusz
, так что все, инкапсуляция или я должен сказать - скрытие данных - это все о скриншоте и ничего общего с безопасностью, даже если вы предоставляете свои API как стороннюю банку –