ما هو بحث netbean؟
-
13-09-2020 - |
سؤال
أجد صعوبة في فهم هذا.بشكل أساسي، يتم استخدام واجهة برمجة تطبيقات البحث هذه للحفاظ على طبيعة الوحدات البينية المقترنة بشكل غير محكم.إذن، هل يمكن لمزود الخدمة ووحدات المستهلك التواصل مع بعضهما البعض باستخدام واجهة برمجة تطبيقات البحث، أليس كذلك؟
لكن ما لا أفهمه هو:
هل البحث يشبه حقيبة مليئة بالأشياء المخصصة لهذا الفصل؟هل يستطيع أحد أن يعطي تشبيهًا أسهل؟
لذلك يتم إنشاء التبعيات، وتقوم بتنفيذ LookupListener في مستهلك الخدمة، أليس كذلك؟من الواضح أن المستهلك يعتمد على المزود.
إذن ما هو تطبيق الاستماع إلى LookupListener؟انها بحث الخاصة؟لذا، إذا كانت هناك خريطة لفئة وحدة نمطية أخرى، فسيتم تخزينها ككائن داخل تطبيق LookupListener؟
لذا فإن البحث يشبه الحقيبة التي يمكنها تخزين فئات وحدة أخرى وطرقها؟
هل هذه هي العملية الصحيحة لتحديد الاختيار؟
- في TopComponent (العرض) تقوم بتنفيذ مستمع البحث ومستمع الإجراء.
- تقوم بإنشاء كائن جديد (من الوحدة الأخرى)
associateLookup(Lookups.singleton(fff));
مرة أخرى، الخلط مع هذا السطر:ما هوassociateLookup()
تفعل بالضبط؟result = Utilities.actionsGlobalContext().lookupResult(Browser1.class);
ماذا يفعل هذا الخط؟ما هي النتيجة؟هل يحتوي على فئة Browser1 (من وحدة أخرى)؟result.addLookupListener (this)
;لماذا تضيف المستمع إلى النتيجة؟وما الذي نستمع إليه ولماذا في TopComponent؟منتهي ؟
وأخيرًا، ومما يزيد من حيرتي، كيف يمكن لـ 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();
سيعود المثيلات التي تم تحديدها.