![](/img/trans.png)
[英]what is the difference between implementing from an interface and extending from the object class?
[英]Is there a difference between extending ServiceTracker class and implementing ServiceTrackerCustomizer interface when tracking OSGi services?
我正在创建一些OSGi捆绑包。 他们注册服务,也获得(当然使用)彼此的服务。
我决定使用ServiceTracker
代替声明式服务。
在搜索有关此信息的过程中,我发现了两种跟踪服务的方法。
第一个是为每个服务创建一个自己的跟踪器类,它扩展了ServiceTracker
类并覆盖了需要覆盖的方法。 然后在激活器类中创建此跟踪器类的新实例,将其捆绑软件上下文提供给它,并打开它进行跟踪。
另一种方法是为每个服务创建一个跟踪器类,该类实现 ServiceTrackerCustomizer
接口并覆盖需要覆盖的方法。 然后在激活器类创建的新实例ServiceTracker
类给它的捆绑情况下,被跟踪需要的服务的名称,我们的定制类的新实例。 然后打开它进行跟踪。
两种方法之间有什么区别吗? 我会说不。 在ServiceTracker Javadoc中,我可以看到ServiceTracker
类还实现了ServiceTrackerCustomizer
接口。
您能否告诉我这两种方法的利弊? 提前致谢。
这是我的原因:
子类ServiceTracker如果
在以下情况下实现接口:
如果发生以下情况,请勿直接使用ServiceTracker
在使用OSGi进行开发的12年里,我认为我从未编写一个ServiceTrackerCustomizer
。 恕我直言,直接子类化ServiceTracker
并将customizer参数保留为null
更加方便。
子类化更容易的一个简单原因是,您不需要提供modifiedService
方法的实现,而这是很少需要的。
从功能上讲,结果是相同的,因此非常个人喜好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.