7

私はこれを理解するのに苦労しています。基本的に、このルックアップ API は、疎結合されたモジュール間の性質を維持するために使用されます。基本的に、サービス プロバイダーとコンシューマー モジュールはそれぞれ Lookup API を使用して相互に通信できますか?

しかし、私が理解していないのは次のとおりです。

Lookup は、そのクラスのどのオブジェクトでいっぱいのバッグのようなものですか? 誰かがより簡単な類推を与えることができますか?

依存関係が作成され、サービス コンシューマーに LookupListener を正しく実装しますか? 明らかに、消費者はプロバイダーに依存しています。

では、リッスンしている LookupListener の実装は何ですか? それは独自のルックアップですか?別のモジュールのクラスのマップがある場合、それは LookupListener の実装の Lookup 内にオブジェクトとして格納されますか?

つまり、ルックアップは、別のモジュールのクラスとメソッドを格納できるバッグのようなものですか?

これは、選択を決定する正しいプロセスですか?

  1. TopComponent (ビュー) では、ルックアップ リスナーとアクション リスナーを実装します。
  2. (他のモジュールから)新しいオブジェクトを作成します
  3. associateLookup(Lookups.singleton(fff));繰り返しますが、この行との混乱:associateLookup()正確には何をしているのですか?
  4. result = Utilities.actionsGlobalContext().lookupResult(Browser1.class);この行は何をしているのですか?結果とは?(他のモジュールからの)Browser1クラスが含まれていますか?
  5. result.addLookupListener (this); なぜリスナーを結果に追加するのですか? TopComponent で何をリッスンしているのか、そしてその理由は何なのか?

  6. 終わり ?

そして最後に、私の混乱をさらに深めるために、Node API はどのようにして pla7y に入りますか?

4

2 に答える 2

5

ルックアップは、疎結合の高結束原理をサポートする基本的なツールと考えることができます。

beverage-api基本的に、モジュールに API があります。

public interface Beverage {
   ...
}

beers次に、依存する別のモジュールbeverage-api:

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

あなたに依存する別のモジュールではbeverage-api、魔法の式を書くことができます:

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

これにより、特定のクラスへの正確な依存関係を宣言したり、そのモジュールへの依存関係を持ったりすることなく、すべての飲料プロバイダーのリストを取得できます。これは素晴らしいことです。コードは特定の実装に依存していません。これらのモジュールをクラスパスに配置するだけで十分であり、アプリケーションに「自動的に」ロードされます。

associateLookup(Lookups.singleton(fff));繰り返しますが、この行との混乱: AssociateLookup() は正確に何をしているのですか?

はい、それは紛らわしいです。基本的に、検索システムにオブジェクトを手動で追加しています。

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

Utilities.actionsGlobalContext()現在選択されている (アクティブな) に関連付けられていTopCompomentます。Beverage.classアクティブなコンポーネントに存在する場合、インスタンスを返します。特定のクラスのすべてのインスタンスが必要な場合は、を使用する必要がありますlookupAll()

result.addLookupListener(this);なぜリスナーを結果に追加するのですか?

変更に関する通知を受け取るため。ユーザーがいくつかのオブジェクトを選択すると、メソッドBeveragesがトリガーされます。LookupListener

void resultChanged(LookupEvent ev);

result.allInstances();どのインスタンスが選択されたかを返します。

于 2015-02-10T22:23:44.077 に答える
3

NetBeans プラットフォームの Lookup API については、適切な議論があります。

于 2010-07-11T14:52:57.300 に答える