Ich habe eine Klasse in Java erweitert, die eine private Variable hat, von der ich den Wert erhalten möchte, bevor sie geändert wird. Es gibt keine Methoden, um auf diese Variable in der Superklasse zuzugreifen. Ich habe versucht super().m_zoomArea
(die Variable ist in der ZoomableChart
Klasse von jChart2D). Die Variable wird aktualisiert, wenn die Methode mouseDragged
aufgerufen wird. Ich habe diese Methode überschrieben und möchte den Wert der Variablen abrufen, bevor sie aktualisiert wird.Zugriff auf eine private Variable der Klasse super() in Java - JChart2D
Antwort
Sie können nicht. Der springende Punkt ist private ist, dass Sie nicht auf die Variable bekommen können. Wenn die Klasse keine Möglichkeit gefunden hat, es herauszufinden, können Sie es nicht bekommen. Das kann oder kann nicht ein Designfehler in der Klasse sein, aber wenn Sie Reflektionen mit geeigneten Rechten verwenden (die ich nicht empfehle - Sie verlassen sich im Grunde auf private Implementierungsdetails), müssen Sie daran denken ein alternativer Ansatz.
Sie können nicht auf private Variablen außerhalb der Klasse zugreifen. Um darauf zugreifen zu können, müsstest du es geschützt haben.
Sie könnten Reflexion verwenden, aber es ist eine schlechte Idee. Ein privates Feld ist privat, weil der Entwickler nicht möchte, dass Sie sich damit anlegen.
Ich gebe Ihnen nicht den Weg, es hier zu tun, aber wenn Sie wirklich wissen, was Sie tun, folgen Sie den unten stehenden Links auf eigene Gefahr. Auch hier solltest du nicht einmal darüber nachdenken.
zum gleichen Thema:
Sie können dies mit dem Reflection-API (genauer gesagt, finden Sie in der setAccessible () Methode). Wie auch immer, dies ist ein Hack und funktioniert möglicherweise nicht, wenn ein SecurityManager in der VM installiert ist.
Sie können auf private Variable jeder Klasse zugreifen, aber es ist eine schlechte Idee, weil Sie eines der grundlegenden Prinzipien der OOP - Kapselung brechen.
Aber manchmal Programmierer sind gezwungen, es zu brechen. Hier ist der Code, der das Problem löst:
Erweiterte Klasse
public class ExtZoomableChart
extends ZoomableChart {
public Rectangle2D getZoomArea() {
try {
Field field = ZoomableChart.class.getDeclaredField("m_zoomArea");
field.setAccessible(true);
Object value = field.get(this);
field.setAccessible(false);
if (value == null) {
return null;
} else if (Rectangle2D.class.isAssignableFrom(value.getClass())) {
return (Rectangle2D) value;
}
throw new RuntimeException("Wrong value");
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
und rufen Beispiel:
public class Main {
public static void main(String[] args) {
ExtZoomableChart extZoomableChart = new ExtZoomableChart();
Rectangle2D d = extZoomableChart.getZoomArea();
System.out.println(d);
}
}
Sie brauchen nicht ZoomableChart zu erweitern privat zu bekommen Variable. Sie können es fast von überall her erhalten. Aber denken Sie daran - normalerweise ist es eine schlechte Übung.
- 1. Reflektierender Zugriff auf eine statische Variable in einer Java-Klasse
- 2. Zugriff auf Super-Klasse-Objekt
- 3. Zugriff auf Variable innerhalb der inneren Klasse in Java
- 4. Java - Methode Zugriff in Paket-private Klasse?
- 5. Eine Super-Klasse Super-Klasse Super
- 6. Können wir Zugriff auf eine private Variable in einer anderen Klasse in Typoskript
- 7. Python-Klasse - Super Variable
- 8. Zugriff auf eine Methode Variable in Java
- 9. Zugriff auf private Variablen
- 10. Inherit Unterklasse Variable von super in Java
- 11. private Variable von Member-Funktion in PHP Zugriff auf
- 12. Zugriff auf private Variable aus statischer Funktion in php
- 13. Zugriff auf Config.groovy aus der Java-Klasse
- 14. Verweis auf eine private Klasse in JUnit
- 15. Zugriff auf Variable von einer anderen Klasse
- 16. Python: Zugriff auf äußere private Funktionen von der inneren Klasse
- 17. Verschachtelte Klasse 'Zugriff auf umschließende Klasse' private Datenelemente
- 18. Wie Zugriff auf private Variable von Objekt instanziiert innerhalb der Klasse
- 19. Zugriff auf "Super" durch Zeiger auf Klassenobjekt
- 20. Zugriff auf private Superklassenfelder mit dem Schlüsselwort super in einer Unterklasse
- 21. force get/set Zugriff auf private Variablen für private Eigenschaften
- 22. Zugriff auf eine Java-Variable in JavaScript-Funktion
- 23. Zugriff auf "Public" -Methoden von "Private" Methoden in JavaScript-Klasse
- 24. Zugriff auf lokale Variable in der inneren Klasse
- 25. Zugriff auf eine Variable aus einer anderen Klasse in Java nicht möglich?
- 26. Zugriff auf private Mitglieder einer Superklasse
- 27. Assign Wert auf private statische Variable in einer Klasse
- 28. Fix einen Java-Klasse Konstruktor, der Super anrufen
- 29. Zugriff auf eine Variable aus einer anderen Klasse
- 30. Zugriff auf Super-Klasse-Funktion mit Subclass-Objekt