Sind private Methoden wirklich sicher?

In Java dieprivate Der Zugriffsmodifikator wird als sicher eingestuft, da er außerhalb der Klasse nicht sichtbar ist. Dann weiß auch die Außenwelt nichts über diese Methode.

Aber ich dachte, Java Reflection kann diese Regel brechen. Betrachten Sie folgenden Fall:

public class ProtectedPrivacy{

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

}  

Jetzt bekomme ich aus einer anderen Klasse Info:

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

In diesem Moment dachte ich nur, dass noch eine private Methode sicher ist, da wir den Methodennamen kennen müssen, um etwas wie oben zu tun. Aber wenn eine Klasse eine private Methode enthält, die von jemand anderem geschrieben wurde, können wir diese nicht anzeigen.

Aber mein Punkt wird ungültig, da unter Codezeile.

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

Jetzt dasmethod[] Enthält alles, was Sie über alles tun müssen. Meine Frage ist, gibt es eine Möglichkeit, diese Art von Dingen mit Java Reflection zu vermeiden?

Ich zitiere irgendwann ausJava-Dokumentation um meine frage zu klären.

Tipps zur Auswahl einer Zugriffsebene:

Wenn andere Programmierer Ihre Klasse verwenden, möchten Sie sicherstellen, dass keine Fehler aufgrund von Missbrauch auftreten können. Zugriffsebenen können Ihnen dabei helfen. Verwenden Sie die restriktivste Zugriffsebene, die für ein bestimmtes Mitglied sinnvoll ist. Verwenden Sie privat, es sei denn, Sie haben einen guten Grund, dies nicht zu tun.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage