10
votes

Accédez à une variable privée de la super () classe en Java - JCHART2D

J'ai prolongé une classe en Java qui a une variable privée que je souhaite obtenir la valeur de son évolution. 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 catégorie zoomablechart de JCHART2D). La variable est mise à jour lorsque la méthode MouseDragged


0 commentaires

5 Réponses :


15
votes

Vous ne pouvez pas. Tout le point de ce qui est privé est que vous ne pouvez pas obtenir à la variable. Si la classe n'a donné aucun moyen de le trouver, vous ne pouvez pas l'obtenir. Qui peut ne pas être une faille de conception dans la classe, mais à moins que vous n'utilisiez pas de réflexion avec des privilèges appropriés (que je ne vous recommandez pas - vous comptez essentiellement sur les détails de la mise en œuvre privés) Vous allez avoir à penser à une approche alternative.


0 commentaires

1
votes

Vous ne pouvez pas accéder aux variables privées de l'extérieur de la classe. Pour y accéder, vous devriez l'avoir protégé.


0 commentaires

4
votes

Vous pouvez utiliser la réflexion, mais c'est une mauvaise idée. Un domaine privé est privé car le développeur ne veut pas que vous plaisante.

Je ne vais pas vous donner le moyen de le faire ici, mais si vous vraiment savez ce que vous faites, suivez les liens ci-dessous à vos propres risques. Encore une fois, vous ne devriez même pas penser à faire cela.


sur le même sujet:


0 commentaires

0
votes

Vous pouvez le faire avec l'API de réflexion (spécifiquement, voir la méthode SETACESSIBLE ()). Quoi qu'il en soit, il s'agit d'un hack et peut ne pas fonctionner s'il existe un SecurityManager installé dans la machine virtuelle.


0 commentaires

26
votes

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 OOP - encapsulation.

Mais parfois, le programmeur est obligé de le casser. Voici le code, qui résout votre problème: p>

classe étendue p> xxx pré>

} p>

et d'appel exemple: P>

public class Main {
    public static void main(String[] args) {
        ExtZoomableChart extZoomableChart = new ExtZoomableChart();

        Rectangle2D d = extZoomableChart.getZoomArea();
        System.out.println(d);
    }
}


0 commentaires