Foros del Web » Programación para mayores de 30 ;) » Java »

Averiguar qué clase instanció a otra en tiempo de ejecución

Estas en el tema de Averiguar qué clase instanció a otra en tiempo de ejecución en el foro de Java en Foros del Web. Hola: He estado buscando información, pero no encuentro una forma concreta para poder referirme a la clase que ha instanciado a otra desde esta última. ...
  #1 (permalink)  
Antiguo 14/03/2006, 06:14
Avatar de Negora  
Fecha de Ingreso: agosto-2003
Mensajes: 122
Antigüedad: 20 años, 9 meses
Puntos: 5
Averiguar qué clase instanció a otra en tiempo de ejecución

Hola:

He estado buscando información, pero no encuentro una forma concreta para poder referirme a la clase que ha instanciado a otra desde esta última.

Por ejemplo, si tengo ClaseLlamante1 y ClaseLlamante2 y crean cada una una instancia de ClaseLlamada, me gustaría poder crear diferentes comportamientos dentro de ClaseLlamada en función de quién la ha instanciado. Así, si ha sido ClaseLlamante1, podría mostrar la información en color rojo, y si es ClaseLlamante2, en azul. Esto por proponer un ejemplo sencillo, ya que mi propósito es algo más complejo. Pero necesito averiguar primero cómo discernir entre llamantes.

Si no me equivoco, este tipo de operación sólo sería posible llevarlo a cabo en tiempo de ejecución, ¿Verdad? Quizá ande lejos, pero he procurado revisar la clase ClassLoader y otras relacionadas en busca de información y no he dado con nada. Entiendo que es necesario enredar con alguna operación de la JVM... ¿Alguien que me eche una mano?

Muchas gracias.
  #2 (permalink)  
Antiguo 14/03/2006, 07:15
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
En principio no hay forma, que yo recuerde, de saber cual es la clase que te ha "creado", a no ser que le pases una referencia explicita, que es lo que se suele hacer.
Lo cual, al fin y al cabo, ayuda en la legilibilidad de los programas.
  #3 (permalink)  
Antiguo 14/03/2006, 07:45
Avatar de Negora  
Fecha de Ingreso: agosto-2003
Mensajes: 122
Antigüedad: 20 años, 9 meses
Puntos: 5
GreenEyed: Gracias por tu respuesta. Ya pensé en esa forma, pero mi problema es que existen megas y megas de código ya escrito que hacen uso de esta clase y de otras similares (unos 2300 JSPs en concreto), y estaba pensando en hacerlo de forma transparente dentro de las clases, para así no tener que modificar a mano cada JSP. Modificar las clases, pese a ser también muchas (unas 1500), no me supondría problema, ya que las genero semiautomáticamente mediante un programa que desarrollé para uso interno, y sólo habría de modificar el código fuente de éste y regenerarlas de nuevo.

El caso concreto consiste en que me gustaría discernir entre la clase instanciadora para dar distintos formatos de salida. Me gustaría que esta clase, que recupera datos de una base de datos, formatee la doble comilla y el retorno de carro a entidades HTML (o XHTML, es igual) cuando se trate de un Servlet, para así evitar que los campos de un formulario sufran problemas al dar salida a textos de este tipo. De ese modo, la clase, una vez instanciada, sabría reconocer el tipo de formateo a aplicar (que puede complicarse aun más si uno quiere) Así se pueden reutilizar las clases tanto para desarrollar Servlets como en cualquier programa que necesite una salida formateada de otra manera.

Si alguien conoce alguna posibilidad de obtener esta información de la JVM, le agradecería que la comentase ;) .
  #4 (permalink)  
Antiguo 14/03/2006, 10:30
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Hay una posibilidad indirecta, que es usando el stacktrace de la llamada actual, pero es mataría a lo bruto el rendimiento de tu aplicación, ya que es una operacón muy costosa.

A parte de eso, no conozco nada en el API.

¿Has mirado si AOP te podría ayudar por ahi? Se supone que es para añadir comportamientos dinámicos a las clases... aunque no lo he probado.
  #5 (permalink)  
Antiguo 27/03/2006, 04:38
Avatar de Negora  
Fecha de Ingreso: agosto-2003
Mensajes: 122
Antigüedad: 20 años, 9 meses
Puntos: 5
GreenEyed: Hola de nuevo. Te pido disculpas por no responder antes, pero se me fue por completo el asunto. Echaré un ojo a eso que comentas, a ver qué puede ofrecerme. A ver si hay suerte.

Por el momento, pienso que voy a crear una propiedad dentro de la clase que actúe a modo de "flag" buleano, de manera que estableciéndolo a "cierto" sí realice esa conversión. Y dado que no puedo estar a modificar esa cantidad de JSPs, lo que voy a hacer es que por defecto esté marcada a "cierto" y que si se quiere establecer a "false", se haga mediante un constructor diferente. Al fin y al cabo, si las clases se emplean dentro de un entorno ajeno a HTML, tan sólo habría que añadir un argumento más en la llamada al constructor.

Muchas gracias por tus aclaraciones :) .
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:42.