Pregunta

Tengo problemas para entender esto.Básicamente, esta API de búsqueda se utiliza para mantener la naturaleza entre módulos débilmente acoplados.Entonces, básicamente, un proveedor de servicios y un módulo consumidor pueden comunicarse entre sí utilizando la API de búsqueda, ¿correcto?

Pero lo que no entiendo es:

¿Lookup es como una bolsa llena de qué objetos para esa clase?¿Alguien puede dar una analogía más sencilla?

Entonces, se crean las dependencias y usted implementa LookupListener en el consumidor del servicio, ¿correcto?Obviamente el consumidor depende del proveedor.

Entonces, ¿qué escucha la implementación de LookupListener?¿Es su propia búsqueda?Entonces, si hay un mapa de la clase de otro módulo, ¿se almacenará como un objeto dentro de Lookup de la implementación de LookupListener?

Entonces, ¿la búsqueda es como una bolsa que puede almacenar las clases de otro módulo y sus métodos?

¿Es este el proceso correcto para determinar una selección?

  1. en TopComponent (vista) implementa el escucha de búsqueda y el escucha de acción.
  2. creas un nuevo objeto (del otro módulo)
  3. associateLookup(Lookups.singleton(fff)); De nuevo, confusión con esta línea:qué es associateLookup() exactamente haciendo?
  4. result = Utilities.actionsGlobalContext().lookupResult(Browser1.class); ¿Qué hace esta línea?cual es el resultado?¿Contiene la clase Browser1 (de otro módulo)?
  5. result.addLookupListener (this);¿Por qué agregarías el oyente al resultado?¿Y qué estamos escuchando y por qué en TopComponent?

  6. Hecho ?

Y finalmente, para aumentar mi confusión, ¿cómo entra en juego Node API?

Otros consejos

Puedes pensar en las búsquedas como una herramienta básica que admite Principio de alta cohesión de acoplamiento flojo..

Básicamente tienes una API en beverage-api módulo:

public interface Beverage {
   ...
}

Luego otro módulo beers que depende de beverage-api:

@ServiceProvider(service = Beverage.class)
public class SomeBeer implements Beverage {
   ...
}

en otro módulo que también depende de beverage-api puedes escribir una fórmula mágica:

Collection list = Lookup.getDefault().lookupAll(Beverage.class);

lo que le brindará una lista de todos los proveedores de bebidas sin declarar una dependencia exacta de la clase específica o tener dependencia de ese módulo.Esto es genial, su código no depende de una implementación específica, es suficiente tener estos módulos en la ruta de clases y se cargarán "automágicamente" en su aplicación.

associateLookup(Lookups.singleton(fff)); De nuevo, confusión con esta línea:¿Qué está haciendo exactamente AssociateLookup()?

Sí, eso es confuso.Básicamente, estás agregando manualmente algún objeto al sistema de búsqueda.

result = Utilities.actionsGlobalContext().lookupResult(Beverage.class);

Utilities.actionsGlobalContext() está relacionado con el seleccionado actualmente (activo) TopCompoment.Devolverá una instancia de Beverage.class si existe en el componente activo.Si desea todas las instancias de una clase determinada, debe usar lookupAll().

result.addLookupListener(this); ¿Por qué agregarías el oyente al resultado?

Para recibir notificaciones sobre cambios.Cuando el usuario selecciona algunos Beverages objetos que desencadena LookupListener método:

void resultChanged(LookupEvent ev);

y result.allInstances(); devolverá qué instancias fueron seleccionadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top