KJW*_*KJW 7 java netbeans netbeans-platform
我很难理解这一点.基本上,此Lookup API用于保持松散耦合的模块间性质.那么基本上服务提供者和消费者模块可以使用Lookup API相互通信吗?
但我不明白的是:
Lookup就像一个装满那个类的对象的包?有人可以给出一个更简单的类比吗?
那么创建依赖关系,并在服务使用者中实现LookupListener是否正确?消费者显然依赖提供者.
那么LookupListener的实现是什么监听的?这是自己的Lookup?那么如果有另一个模块的类的映射,它将作为一个对象存储在Lookup的Lookup实现LookupListener中?
所以查找有点像一个包,可以存储另一个模块的类和它的方法?
这是确定选择的正确过程吗?
associateLookup(Lookups.singleton(fff));再次,与这条线混淆:associateLookup()究竟在做什么?result = Utilities.actionsGlobalContext().lookupResult(Browser1.class);这条线在做什么?结果是什么?它是否包含Browser1类(来自其他模块)?result.addLookupListener (this); 为什么要为结果添加监听器?我们在TopComponent上正在倾听什么以及为什么?
做完了?
最后,为了进一步让我感到困惑,Node API如何进入pla7y?
您可以将 Lookups 视为支持松耦合高内聚原则的基本工具。
基本上你在beverage-api模块中有一个 API :
public interface Beverage {
...
}
Run Code Online (Sandbox Code Playgroud)
然后是另一个beers依赖于的模块beverage-api:
@ServiceProvider(service = Beverage.class)
public class SomeBeer implements Beverage {
...
}
Run Code Online (Sandbox Code Playgroud)
在另一个也取决于beverage-api您的模块中,您可以编写一个神奇的公式:
Collection list = Lookup.getDefault().lookupAll(Beverage.class);
Run Code Online (Sandbox Code Playgroud)
这将为您提供所有饮料供应商的列表,而无需声明对特定类的确切依赖或对该模块的依赖。这很棒,您的代码不依赖于特定的实现,在类路径上拥有这些模块就足够了,它们将“自动神奇地”加载到您的应用程序中。
associateLookup(Lookups.singleton(fff));再次,与这一行混淆:associateLookup() 到底在做什么?
是的,这很令人困惑。基本上你是手动添加一些对象到查找系统。
result = Utilities.actionsGlobalContext().lookupResult(Beverage.class);
Utilities.actionsGlobalContext()与当前选择的 (active) 相关TopCompoment。Beverage.class如果它存在于活动组件中,它将返回一个实例。如果你想要给定类的所有实例,你应该使用lookupAll().
result.addLookupListener(this);为什么要在 result 中添加监听器?
获取有关更改的通知。当用户选择一些Beverages对象时,它会触发LookupListener方法:
void resultChanged(LookupEvent ev);
Run Code Online (Sandbox Code Playgroud)
并且result.allInstances();将返回选择哪些实例。
| 归档时间: |
|
| 查看次数: |
1944 次 |
| 最近记录: |