我正在努力实现一个处理Comparator
和Comparable
接口的层次结构。我不清楚的几件事情:
如果我将比较器添加到比较器链中,这段代码究竟是什么意思
chain.addComparator(new sortByTitle());
我知道sortByTitle()
参数必须是比较器,但我不明白你是如何实现这样的函数的?比较器要求你实现compare(obj1, obj2)
函数,该函数接受两个参数来比较一个参数,你如何从一个(看起来像一个构造函数)调用没有参数?
假设我实现了一个名为Database
的类,它将一些项目存储在名为ArrayList
的{{1}}中。变量item
本身就是一个私有变量。现在在主程序中,进行如下调用:
item
如何直接访问库的Collections.sort(library.item, chain);
实例?数据库规范指出item
需要私有,这可以吗?
我将不胜感激。
答案 0 :(得分:4)
Comparator
本身就是一个界面。当你
说chain.addComparator(new sortByTitle());
,你正在传递
用于对对象进行排序的Comparator实现的实例
按标题。在这种情况下,sortByTitle
类将实现
Comparator
并将提供实施
compare(obj1, obj2)
方法。您的链可以在其上调用
你传入的实例。通常,不是每次传递一个新实例,而是一个所有Comparator
实现
Object被声明为Object的公共静态最终成员
本身。例如:
public static final Comparator TITLE_COMPARATOR = new Comparator() {
@Override
public int compare(Object lhs, Object rhs) {
// comparison logic
}
};
然后您可以通过这种方式将它们传递到您的链中:
chain.addComparator(YourObject.TITLE_COMPARATOR);
这有一个额外的好处,即允许比较器(无状态)在别处使用,而不是每次都创建一个新实例。
类似的东西:
public List getItem() {
return item;
}
和
public void setItem(List item) {
this.item = item;
}
在图书馆课程中。