ServiceReference。compareTo是根据service.ranking和service.id定义的。但是,似乎可以通过ServiceRegistration。setProperties动态/异步地更新service.ranking。这意味着两个ServiceReference之间的compareTo可能因调用而异,这使得ServiceReference无法用于Comparable的所有典型用法。例如,如果排序时异步更新排名,则Arrays.sort行为不当;如果完全更新service.ranking,则TreeSet 将损坏。
为什么ServiceReference实现可比性?似乎完全没有compareTo或至少不实现Comparable似乎更好,以避免鼓励开发人员不当使用API。
是否有关于维护服务分类列表的数据结构建议?特别是,供DS绑定方法用于cardinality =“ 0..n”引用。
最佳答案
ServiceReference对象不是一成不变的。没有要求Comparable对象是不可变的,因此我不确定为什么您期望ServiceReference对象是不变的。
ServiceTracker使用ServiceReferences的可比性来维护跟踪服务的排序顺序。
在DS 1.2中,我们为引用引入了新的“更新”方法,当引用的服务的服务属性发生更改时会调用该方法。当引用服务的服务属性发生更改时,可以使用此方法触发对数据结构的使用。