Frage

Es fällt mir schwer, das zu verstehen.Grundsätzlich wird diese Lookup-API verwendet, um die lose gekoppelte Intermodulnatur beizubehalten.Also im Grunde können ein Dienstanbieter und Verbrauchermodule über die Lookup-API miteinander kommunizieren, richtig?

Aber was ich nicht verstehe ist:

Ist Lookup wie eine Tasche voller welcher Objekte für diese Klasse?Kann jemand eine einfachere Analogie geben?

Die Abhängigkeiten werden also erstellt und Sie implementieren den LookupListener im Service-Consumer, richtig?Offensichtlich ist der Verbraucher vom Anbieter abhängig.

Worauf hört dann die Implementierung von LookupListener zu?Es ist eine eigene Suche?Wenn es also eine Karte der Klasse eines anderen Moduls gibt, wird diese als Objekt in Lookup der Implementierung von LookupListener gespeichert?

Lookup ist also so etwas wie eine Tasche, in der die Klassen und Methoden eines anderen Moduls gespeichert werden können?

Ist dies der richtige Prozess zur Bestimmung einer Auswahl?

  1. In der TopComponent (Ansicht) implementieren Sie den Lookup-Listener und den Aktions-Listener.
  2. Sie erstellen ein neues Objekt (aus dem anderen Modul)
  3. associateLookup(Lookups.singleton(fff)); Nochmals Verwirrung mit dieser Zeile:was ist associateLookup() genau tun?
  4. result = Utilities.actionsGlobalContext().lookupResult(Browser1.class); Was macht diese Zeile?Was ist Ergebnis?Enthält es die Browser1-Klasse (aus einem anderen Modul)?
  5. result.addLookupListener (this);Warum sollten Sie dem Ergebnis einen Listener hinzufügen?und worauf achten wir und warum auf der TopComponent?

  6. Erledigt ?

Und schließlich, um meine Verwirrung noch weiter zu verstärken: Wie kommt die Node-API ins Spiel?

War es hilfreich?

Andere Tipps

Sie können sich Lookups als ein grundlegendes Tool zur Unterstützung vorstellen Prinzip der losen Kopplung und hoher Kohäsion.

Grundsätzlich haben Sie eine API in beverage-api Modul:

public interface Beverage {
   ...
}

Dann noch ein Modul beers was davon abhängt beverage-api:

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

in einem anderen Modul, das ebenfalls davon abhängt beverage-api Sie können eine Zauberformel schreiben:

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

Dadurch erhalten Sie eine Liste aller verfügbaren Getränkeanbieter, ohne die genaue Abhängigkeit von der jeweiligen Klasse anzugeben oder eine Abhängigkeit von diesem Modul zu haben.Das ist großartig, Ihr Code ist nicht von einer bestimmten Implementierung abhängig. Es reicht aus, diese Module im Klassenpfad zu haben, und sie werden „automatisch“ in Ihre Anwendung geladen.

associateLookup(Lookups.singleton(fff)); Nochmals Verwirrung mit dieser Zeile:Was macht AssociateLookup() genau?

Ja, das ist verwirrend.Im Grunde fügen Sie manuell ein Objekt zum Suchsystem hinzu.

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

Utilities.actionsGlobalContext() bezieht sich auf die aktuell ausgewählte (aktive) TopCompoment.Es wird eine Instanz von zurückgegeben Beverage.class wenn es in der aktiven Komponente vorhanden ist.Wenn Sie alle Instanzen einer bestimmten Klasse möchten, sollten Sie diese verwenden lookupAll().

result.addLookupListener(this); Warum sollten Sie dem Ergebnis einen Listener hinzufügen?

Um Benachrichtigungen über Änderungen zu erhalten.Wenn der Benutzer einige auswählt Beverages Objekte, die es auslöst LookupListener Methode:

void resultChanged(LookupEvent ev);

Und result.allInstances(); gibt zurück, welche Instanzen ausgewählt wurden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top