سؤال

أجد صعوبة في فهم هذا.بشكل أساسي، يتم استخدام واجهة برمجة تطبيقات البحث هذه للحفاظ على طبيعة الوحدات البينية المقترنة بشكل غير محكم.إذن، هل يمكن لمزود الخدمة ووحدات المستهلك التواصل مع بعضهما البعض باستخدام واجهة برمجة تطبيقات البحث، أليس كذلك؟

لكن ما لا أفهمه هو:

هل البحث يشبه حقيبة مليئة بالأشياء المخصصة لهذا الفصل؟هل يستطيع أحد أن يعطي تشبيهًا أسهل؟

لذلك يتم إنشاء التبعيات، وتقوم بتنفيذ LookupListener في مستهلك الخدمة، أليس كذلك؟من الواضح أن المستهلك يعتمد على المزود.

إذن ما هو تطبيق الاستماع إلى LookupListener؟انها بحث الخاصة؟لذا، إذا كانت هناك خريطة لفئة وحدة نمطية أخرى، فسيتم تخزينها ككائن داخل تطبيق LookupListener؟

لذا فإن البحث يشبه الحقيبة التي يمكنها تخزين فئات وحدة أخرى وطرقها؟

هل هذه هي العملية الصحيحة لتحديد الاختيار؟

  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؟

هل كانت مفيدة؟

نصائح أخرى

يمكنك التفكير في عمليات البحث كأداة أساسية تدعم اقتران فضفاض مبدأ التماسك العالي.

في الأساس لديك واجهة برمجة التطبيقات (API). beverage-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(); سيعود المثيلات التي تم تحديدها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top