Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

246
Views
¿Puedo obtener la instancia del objeto que llama en Java?

Hay una biblioteca que llama a mi método con algunos argumentos. Me gustaría recibir otro argumento, pero la biblioteca no lo proporciona al método al que llama.

Al descompilar la biblioteca, puedo ver que tiene el argumento y está asignada a una variable de instancia (no privada, pero tampoco pública). Sé que puedo acceder a la variable usando la reflexión si tengo la instancia, pero no Tampoco tengo la instancia.

¿Hay alguna manera de que pueda llegar a la instancia? SecurityManager tiene getClassContext() , pero eso solo me da la clase de la instancia; quiero la instancia en sí.

Como un ejemplo rápido de lo que quiero:

 public class A { int b; public A(int b, int c) { this.b = b; D(c); } } public class D { public D(int c) { // Somehow I want to get at the calling instance of A's b from here, // and A belongs to a library which I didn't write. } }

Alternativamente... Sé que b se usó como argumento en la pila de llamadas. Entonces, si alguien sabe cómo puedo acceder a la b que se pasó al constructor de A , eso sería aceptable.

Si ninguno de estos es factible ... Puedo descompilar A y compilarlo de la manera que quiero, y luego necesitaría hacer algo de magia de carga de clases o tendría que modificar el contenido del contenedor. Ninguno de los dos suena deseable, así que espero que alguien sepa cómo acceder a la instancia de A o al argumento b desde la pila de llamadas.

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Con la ayuda del código que proporcionó, podría pensar en escribir un aspecto, me refiero a usar aop e intentar usar el punto de unión para obtener los argumentos que se pasan al constructor A()

about 4 years ago · Santiago Trujillo Report

0

De alguna manera quiero llegar a la instancia de llamada de A's b desde aquí

Respuesta corta: no puedes.

Respuesta larga: puede obtenerlo si lo ejecuta en un depurador o en su propia JVM personalizada.

Otra solución más: use programación orientada a aspectos con un marco como AspectJ

about 4 years ago · Santiago Trujillo Report

0

Usted no puede hacer eso. Vea esta publicación para más detalles.

No existe tal cosa como un 'propietario', por lo que no puede obtener la instancia de llamada, a menos que se especifique una referencia explícita al padre:

 class A { int b; A(int b, int c) { this.b = b; new D(this, c); } } class D { D(A a, int c) { ... } }

Parece que, de acuerdo con la biblioteca, no se supone que obtenga dicha instancia, o está mal diseñada.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!