Частные методы действительно безопасны?
В Javaprivate
Модификатор доступа считают безопасным, поскольку он не виден за пределами класса. Тогда внешний мир неЯ тоже не знаю об этом методе.
Но я думал, что отражение Java можно использовать, чтобы нарушить это правило. Рассмотрим следующий случай:
public class ProtectedPrivacy{
private String getInfo(){
return "confidential";
}
}
Теперь из другого класса я собираюсь получить информацию:
public class BreakPrivacy{
public static void main(String[] args) throws Exception {
ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy();
Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo", null);
method.setAccessible(true);
Object result = method.invoke(protectedPrivacy);
System.out.println(result.toString());
}
}
В этот момент я просто думал, что приватный метод все еще безопасен, так как чтобы сделать что-то подобное, мы должны знать имя метода. Но если класс, который содержит приватный метод, написанный кем-то другим, мы нене иметь видимости тех.
Но моя точка становится недействительной, так как ниже строки кода.
Method method[] = new ProtectedPrivacy().getClass().getDeclaredMethods();
Теперь этоmethod[]
содержит все вещи, которые нужно сделать выше вещи. У меня вопрос, есть ли способ избежать такого рода вещей, используя отражение Java?
Я цитирую какой-то пункт изДокументация Java уточнить мой вопрос.
Советы по выбору уровня доступа:
Если другие программисты используют ваш класс, вы хотите, чтобы ошибки от неправильного использования не возникали. Уровни доступа могут помочь вам в этом. Используйте наиболее ограниченный уровень доступа, который имеет смысл для конкретного участника. Используйте личное, если у вас нет веских причин не делать этого.