Groovy kann auf private Methoden und Variablen einer Java-Klasse zugreifen. Wie macht Groovy das hinter der Bühne? Ist es wegen der Verwendung von invokedynamic
Bytecode-Anweisung, die von MethodHandle
Klasse verwendet wird? Ich denke, Java verwendet invokespecial
Anweisung zum Aufruf private
Methoden und invokevirtual
für public
Recht, die Zugriffsmodifizierer respektiert?Wie kann Groovy auf private Methoden einer Java-Klasse zugreifen?
Antwort
Groovy ist in Java geschrieben, so hofft es hoffentlich nicht direkt auf den Byte-Code, es verwendet es nicht Reflection API.
Weitere Details überprüfen Sie für java.lang.reflect
im Quellcode, Sie werden dann sehen, wie es die Reflection API hinter der Szene verwendet.
Sie können dies ohnehin in Java tun, indem sie mithilfe von Reflektion zum Beispiel diese Methode den Wert eines privaten statischen Feldes gesetzt ...
public static void setStaticField(Class<?> clazz, String fieldName, Object value) {
try {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(null, value);
} catch (Exception ex) {
throw new IllegalArgumentException("Could not set field '" + fieldName + "' of type '" + clazz.getName() + "' to: " + value, ex);
}
}
Hinweis field.setAccessible(true)
Dies kann verhindert werden durch eine geeignete Security Manager Policy eingerichtet haben. Siehe How to restrict developers to use reflection to access private methods and constructors in Java?
Ja, in Java kann ich Reflektion verwenden, aber wie funktioniert Groovy? Ist groovy auch Reflexion? – boring
- 1. Äußere Klassen, die auf package-private Methoden zugreifen
- 2. Private Klassenkonstruktor kann nicht auf private Mitglieder zugreifen
- 3. Method Interceptor auf private Methoden
- 4. wie auf Listenobjekt Methoden zugreifen?
- 5. OLOO wie auf private Variable zugreifen
- 6. Wie kann man in PHP auf private Datenbereiche zugreifen?
- 7. groovy: Wie kann man auf die Eigenschaftendatei zugreifen?
- 8. Prototyp für private Unter Methoden
- 9. F # Private statische Methoden
- 10. Zugreifen auf private Mitglieder beim Implementieren in einer CPP-Datei
- 11. Private Methoden in Ruby
- 12. C++ - Friend-Funktion kann nicht auf private Mitglieder zugreifen
- 13. Private Methoden und Felder
- 14. Google Container Builder kann nicht auf private Github-Repositaries zugreifen
- 15. Friend Ostream kann nicht auf private Mitglied zugreifen
- 16. Zugreifen auf Service aus src/groovy
- 17. Freund mit Klasse, aber kann nicht auf private Mitglieder zugreifen
- 18. Freund Funktion - kann nicht auf private Feld zugreifen C++
- 19. Zugriff auf "Public" -Methoden von "Private" Methoden in JavaScript-Klasse
- 20. Rails Zugriff auf private Methoden mit attr_encrypted
- 21. Private Methoden in einer Mootools-Klasse
- 22. Warum kann eine Instanz einer Klasse auf private Felder einer anderen Instanz eines eigenen Typs zugreifen?
- 23. Wie kann eine Klasse nur auf bestimmte private Mitglieder einer anderen Klasse zugreifen?
- 24. Groovy - Ambigous Handler Methoden
- 25. Java: Kann diese Methoden nicht zugreifen aus einer anderen Klasse
- 26. Zugriff auf private Methoden in der privaten Klasse
- 27. Wann verwenden Sie private Methoden?
- 28. Groovy: Wie Objekte mit ID-Tag zugreifen?
- 29. Dart, Unit Test Private Methoden
- 30. Zugreifen auf Variable von verschiedenen Methoden (Java)
Es verwendet Reflexion. – Henry