J'ai étendu une classe en Java qui a une variable privée dont je veux avoir la valeur avant de la changer. Il n'y a pas de méthodes pour accéder à cette variable dans la super classe. J'ai essayé super().m_zoomArea
(la variable est dans la classe ZoomableChart
de jChart2D). La variable est mise à jour lorsque la méthode mouseDragged
est appelée. J'ai surchargé cette méthode et j'aimerais obtenir la valeur de la variable avant qu'elle ne soit mise à jour.Accéder à une variable privée de la classe super() en Java - JChart2D
Répondre
Vous ne pouvez pas. Tout le point de privé est que vous ne pouvez pas obtenir à la variable. Si la classe n'a donné aucun moyen de le découvrir, vous ne pouvez pas l'obtenir. Cela peut ou peut ne pas être un défaut de conception dans la classe, mais à moins que vous n'utilisiez la réflexion avec des privilèges appropriés (que je ne recommande pas - vous dépendez essentiellement de détails de mise en œuvre privés), vous devrez penser à une approche alternative.
Vous ne pouvez pas accéder à des variables privées en dehors de la classe. Pour y accéder, il faudrait que ce soit protégé.
Vous pourriez utiliser la réflexion mais c'est une mauvaise idée. Un champ privé est privé car le développeur ne veut pas que vous le manipuliez.
Je ne vous donnerai pas le moyen de le faire ici, mais si vous savez vraiment ce que vous faites, suivez les liens ci-dessous à vos risques et périls. Encore une fois, vous ne devriez même pas penser à faire cela.
Sur le même sujet:
Vous pouvez le faire avec l'API de réflexion (Plus précisément, voir le setAccessible () méthode). Quoi qu'il en soit, c'est un hack et peut ne pas fonctionner s'il y a un SecurityManager installé dans la machine virtuelle.
Vous pouvez accéder à une variable privée de n'importe quelle classe, mais c'est une mauvaise idée, car vous enfreignez l'un des principes de base de l'encapsulation POO.
Mais parfois les programmeurs sont forcés de le casser. Voici le code, ce qui permet de résoudre votre problème:
classe étendue
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);
}
}
}
et appelez exemple:
public class Main {
public static void main(String[] args) {
ExtZoomableChart extZoomableChart = new ExtZoomableChart();
Rectangle2D d = extZoomableChart.getZoomArea();
System.out.println(d);
}
}
Vous n'avez pas besoin d'étendre ZoomableChart pour obtenir privé variable. Vous pouvez obtenir de la valeur presque de partout. Mais rappelez-vous - c'est généralement une mauvaise pratique.
- 1. Comment accéder à la super classe de TreeSelectionListener en Java?
- 2. Avoir accès à une variable privée d'autres classes en Java
- 3. Java - Pouvez-vous accéder à une Enum déclarée dans la sous-classe de la classe Super?
- 4. Classe JavaScript - difficulté à accéder à la variable publique dans la méthode privée
- 5. En Java, pourquoi une méthode de super-classe ne peut-elle pas accéder à des méthodes/variables protégées ou privées à partir d'une instance de sous-classe?
- 6. Comment accéder à une méthode de super-classe à partir d'une classe imbriquée?
- 7. Modificateurs d'accès dans une classe imbriquée statique privée en Java
- 8. Méthodes super classe en javascript
- 9. accéder à une variable d'une autre classe via une propriété
- 10. Accéder de manière réfléchie à une variable statique dans une classe Java
- 11. obtenir valeur de super classe java
- 12. Rendre XStream ignorer une variable privée spécifique
- 13. appel super super méthode de classe
- 14. l'accès à la variable dans la classe interne dans Java
- 15. Membres protégés dans une super-classe inaccessible par sous-classe indirecte dans Java
- 16. Est-ce que la variable locale `super`?
- 17. accéder à une variable d'une autre classe développement iphone
- 18. Java/MySQL - Comment accéder à la connexion d'une autre classe?
- 19. L'accès à une variable privée dans la catégorie entraîne une erreur de lien
- 20. Accès à une variable privée dans une portée globale
- 21. super appel en méthode de classe surchargée
- 22. Comment accéder à la valeur d'une variable d'une classe, si la variable est définie dans une autre classe? (Objective-C)
- 23. C# liste variable privée
- 24. Comment j'appelle une méthode super classe
- 25. Est-il possible d'interdire à la classe fils d'appeler la méthode publique de super classe en Java?
- 26. Une classe interne privée synthétise une classe anonyme inattendue
- 27. Pourquoi mon objet ne peut-il pas accéder à sa propre variable membre privée? [C++]
- 28. syntaxe alternative pour accéder à une variable de classe en PHP
- 29. Java étend les classes - Partager les champs de classe au sein de la super étendues classe
- 30. Comment rendre une propriété de classe privée en PHP4?