Czy prywatne metody są naprawdę bezpieczne?

W Javieprivate modyfikator dostępu uważa się za bezpieczny, ponieważ nie jest widoczny poza klasą. Wtedy też świat zewnętrzny nie wie o tej metodzie.

Ale myślałem, że refleksja nad Javą może posłużyć do złamania tej reguły. Rozważmy następujący przypadek:

public class ProtectedPrivacy{

  private String getInfo(){
     return "confidential"; 
  }

}  

Teraz z innej klasy otrzymam informacje:

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());
   }
} 

W tej chwili pomyślałem, że wciąż jest bezpieczna metoda prywatna, ponieważ aby zrobić coś takiego jak powyżej, musimy znać nazwę metody. Ale jeśli klasa zawierająca prywatną metodę napisana przez kogoś innego, nie mamy ich widoczności.

Ale mój punkt staje się nieważny od poniższego wiersza kodu.

Method method[] = new ProtectedPrivacy().getClass().getDeclaredMethods();

Teraz tomethod[] zawiera wszystkie rzeczy, które muszą zrobić powyżej. Moje pytanie brzmi: czy istnieje sposób na uniknięcie tego rodzaju rzeczy wykorzystujących odbicie Java?

Cytuję pewien punktDokumentacja Java wyjaśnić moje pytanie.

Wskazówki dotyczące wyboru poziomu dostępu:

Jeśli inni programiści używają twojej klasy, chcesz mieć pewność, że błędy wynikające z niewłaściwego użycia nie mogą wystąpić. Poziomy dostępu mogą Ci w tym pomóc. Użyj najbardziej restrykcyjnego poziomu dostępu, który ma sens dla konkretnego członka. Użyj prywatnego, chyba że masz dobry powód, aby tego nie robić.

questionAnswers(7)

yourAnswerToTheQuestion