He extendido una clase en Java que tiene una variable privada de la que quiero obtener el valor antes de cambiarla. No hay métodos para acceder a esta variable en la superclase. He intentado super().m_zoomArea
(la variable está en la clase ZoomableChart
de jChart2D). La variable se actualiza cuando se llama al método mouseDragged
. He reemplazado este método y me gustaría obtener el valor de la variable antes de que se actualice.Acceda a una variable privada de la clase super() en Java - JChart2D
Respuesta
No puede. El punto de que es privado es que no se puede obtener en la variable. Si la clase no ha dado ninguna forma de averiguarlo, no puede obtenerlo. Eso puede o no ser un defecto de diseño en la clase, pero a menos que use el reflejo con los privilegios adecuados (que I no recomienda, básicamente se basa en detalles de implementación privados) tendrá que pensar en un enfoque alternativo.
No puede acceder a las variables privadas desde fuera de la clase. Para acceder a él, debes tenerlo protegido.
Podría usar el reflejo, pero es una mala idea. Un campo privado es privado porque el desarrollador no quiere que te metas con él.
No le daré la manera de hacerlo aquí, pero si realmente sabe lo que hace, siga los enlaces a continuación bajo su responsabilidad. De nuevo, ni siquiera deberías pensar en hacer esto.
Sobre el mismo tema:
Usted puede hacer esto con el API de reflexión (en concreto, consulte la setAccessible () método). De todos modos, este es un truco y puede no funcionar si hay un SecurityManager instalado en la VM.
Puede acceder a la variable privada de cualquier clase, pero es una mala idea, ya que está rompiendo uno de los principios básicos de OOP - encapsulación.
Pero a veces los programadores se ven obligados a romperlo. Aquí está el código, que resuelve su problema:
clase extendida
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);
}
}
}
y llame ejemplo:
public class Main {
public static void main(String[] args) {
ExtZoomableChart extZoomableChart = new ExtZoomableChart();
Rectangle2D d = extZoomableChart.getZoomArea();
System.out.println(d);
}
}
No es necesario extender ZoomableChart para obtener privada variable. Puedes obtener su valor casi de todas partes. Pero recuerda: generalmente es una mala práctica.
- 1. acceso clase externa "super" de clase interna en Java
- 2. Acceda a una variable en un script bash
- 3. ¿Hay una sobrecarga de rendimiento para una clase interna privada en Java?
- 4. ¿Cómo acceder a la base (super) clase en Delphi?
- 5. Llamando al método de clase super super
- 6. ¿Puedo hacer que una variable de miembro público sea privada en una clase derivada?
- 7. Acceda a la clase de proyecto principal desde una clase de biblioteca
- 8. Python clase super reflexión
- 9. Java:. Cómo llamar a super() super() en el método reemplazado (método abuelos)
- 10. Llamar a super()
- 11. Serializar/deserializar a través de la clase super
- 12. Java - utilizando la palabra clave 'super'
- 13. Acceso variable privada de la función estática en php
- 14. Representación de Ruby más cercana de una variable de clase 'privada estática final' y 'pública estática final' en Java?
- 15. ¿Una propiedad @ privada crea una variable de instancia @private?
- 16. clase de Python - Super variables
- 17. diferencia entre la variable privada instancia y la propiedad en extensión de clase (Objective-C 2.0)
- 18. Idioma de programación Java: clase de implementación privada
- 19. acceso a la variable dentro de la clase interna en java
- 20. puntero a la clase base y la herencia privada
- 21. ¿Cómo se implementa Super en Java?
- 22. cómo acceder a una variable de clase de la clase externa de clase interna en rubí
- 23. Llamar a una variable de otra clase
- 24. accediendo a una variable de otra clase
- 25. acceder a la memoria privada de un hilo en OpenMP
- 26. Acceda a la instancia actual de la página desde una clase estática
- 27. Acceda a múltiples versiones de un paquete en Java
- 28. Hacer que XStream ignore una variable privada específica
- 29. Clase interna privada sintetiza clase anónima inesperada
- 30. ¿Por qué debería usar una variable privada en un descriptor de acceso a la propiedad?