Encuentra una instancia de clase por objeto de campo dado

¿Es posible encontrar una instancia de objeto utilizando un método público estático que espera un objeto de campo como parámetro?

Eso es lo que busco:

public class Foo {
    private Bar myObject;

    public static Foo get(Bar bar) {
        // return an instance of Foo which has stored a
        // reference to bar inside myObject or null if not found
    }
}

Espero que entiendas mi preocupación. Google no ayudó, supongo que podría haber una solución usando Java Reflection. Muchas gracias por la ayuda.

Respuesta 1

No, no hay forma de saber esto.

Se Barpuede hacer referencia a un objeto determinado mediante cualquier número de instancias Fooo, de hecho, ninguna. A menos que tenga una referencia explícita de regreso Bara Foo, no hay forma de encontrarlos.

(Por supuesto, si conoce todas las Fooinstancias en el sistema, puede buscar de esa manera ...)

Respuesta: 2

No, no puedes retroceder un campo de esa manera. La barreferencia que getrecibe el método es una copia de la referencia pasada. Podría haber docenas de referencias a ese mismo Barobjeto, o ninguna. Si tuviera una lista de todos los Fooobjetos en el sistema, podría averiguar (a través de la reflexión, ya que myObjectes privado) qué Fooobjetos tenían esa misma referencia, pero podría ser fácilmente que hubiera más de uno o ninguno, ya que hay no hay forma de saber que lo barque recibió está referenciado por ninguna Fooinstancia, ni hay ninguna razón por la que solo pueda ser referenciado por uno de ellos.

Respuesta: 3

No es fácil, y mi reacción instintiva es que, a menos que haya un caso muy especial, probablemente esté abordando el problema de la manera incorrecta.

Si realmente necesita hacer esto, puede usar la instrumentación para registrar los constructores de las clases que le interesan y que podrían hacer referencia a Foo, y luego mantener una referencia a los objetos creados en alguna parte.

Luego, puede recorrer todas estas referencias cuando lo desee y usar la reflexión para verificar si alguna contiene el tipo de campo que busca.

No es bonito, ni eficiente, y en la mayoría de los casos sería completamente poco práctico, pero responder a la pregunta desde un punto de vista técnico es la única forma en que puedo pensar en hacerlo.

Respuesta: 4

No, no lo creo, pero si tiene una lista de objetos conocidos (por ejemplo, usando una lista estática y agregando cada nueva isancia), puede crear un método de búsqueda que compare la barra con el objeto fiel ... o simplemente puede crear nueva instancia en este método :)

Respuesta: 5

Tener el siguiente código scratch: public static void main (String [] args) lanza ExecutionException, InterruptedException {CompletableFuture <Void> process1 = CompletableFuture.runAsync (() - & ...

Estoy haciendo una tarea donde tengo que hacer dos cosas usando la exponenciación al cuadrar. Una es obtener el número de multiplicaciones y la otra es obtener el resultado real. Aquí hay algunos ejemplos: 2 ...

¿Alguien puede explicarme cómo configurar correctamente el HUB del servidor Selenium para IP y PUERTO específicos? Encontré este Bind selenium a una IP específica - ¿Posible? pero no estoy seguro de cuál es la IP correcta ya que ...

Estoy ejecutando una aplicación web Tomcat en modo de depuración y, mirando a través de los objetos más grandes con YourKit profiler, veo que, con mucho, el más grande es una sola instancia de com.lmax.disruptor.RingBuffer. ...