gpt4 book ai didi

java - Comparator/Comparable/ComparatorChain问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:55 31 4
gpt4 key购买 nike

我正在努力实现一个处理 ComparatorComparable 接口(interface)的层次结构。我不清楚的几件事:

  1. 如果我将比较器添加到比较器链中,这段代码究竟意味着什么

    chain.addComparator(new sortByTitle());

    我知道 sortByTitle() 参数必须是一个比较器,但我不明白你是如何实现这样一个函数的?比较器要求您实现 compare(obj1, obj2) 函数,该函数采用两个参数将一个参数与另一个参数进行比较,您如何从中获得单个(看起来像构造函数的)调用没有参数?

  2. 假设我实现了一个名为 Database 的类,该类将一些项目存储在名为 itemArrayList 中。变量 item 本身就是一个私有(private)变量。现在在主程序中,进行如下调用:

    Collections.sort(library.item, chain);

    如何直接访问对象 libraryitem 实例?数据库规范规定 item 需要私有(private),这行得通吗?

如有任何帮助,我将不胜感激。

最佳答案

  • 您可能知道,Comparator 本身就是一个接口(interface)。当你 说 chain.addComparator(new sortByTitle());,你正在传递一个 对对象进行排序的 Comparator 实现的实例 按标题。 sortByTitle 类将在这种情况下实现 Comparator 并将提供 compare(obj1, obj2) 方法。你的链可以调用它 你传入的实例。通常,不是每次都传递一个新实例,而是所有 Comparator 实现对象被声明为对象的 public static final 成员本身。

例如:

public static final Comparator TITLE_COMPARATOR = new Comparator() {
@Override
public int compare(Object lhs, Object rhs) {
// comparison logic
}
};

然后您可以通过这种方式将它们简单地传递到您的链中:

chain.addComparator(YourObject.TITLE_COMPARATOR);

这有一个额外的好处,即允许比较器(无状态)在别处使用而无需每次都创建一个新实例。

  • 您需要在 Library 类中编写 getter 和 setter(访问器和修改器,如果您愿意),这将允许其他类读取/更新 item 变量,即使它被声明为私有(private)。

类似于:

public List getItem() {
return item;
}

public void setItem(List item) {
this.item = item;
}

在库类中。

关于java - Comparator/Comparable/ComparatorChain问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11173477/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com