gpt4 book ai didi

java - 如何使我自己的通用结构具有动态比较器

转载 作者:行者123 更新时间:2023-11-29 04:06:05 26 4
gpt4 key购买 nike

我想知道如何重写实现 Comparable 的类中的 compareTo 方法

我的结构树是这样声明的

public class Tree<T extends Comparable<T>> 

使用该结构的类是看起来像那样的平面

public class Plane implements Comparable<Plane> 

使用重写 compareTo 方法,

关键是如果我想用默认比较器创建一棵树,我可以用这个轻松地做到这一点

Tree<Plane> planes = new Tree<Plane>();

但我想要另一个带有平面和不同 compareTo 方法的树结构,我如何才能在平面中覆盖该方法?

谢谢

最佳答案

定义一个重载的构造函数:

public Tree() {
this(Comparator.naturalOrder());
}

public Tree(Comparator<? super T> comparator) {
this.comparator = comparator; // store in a field
}

然后使用比较器代替 compareTo树元素上的方法。


但请注意,提供比较器的能力消除了 T extends Comparable<T> 的限制(无论如何 T extends Comparable<? super T> 更好)。

但在这种情况下,您不能拥有类型安全的默认构造函数。您要么需要始终通过比较器;要么或者提供一个静态工厂方法来创建一个自然排序的树:

static <T extends Comparable<? super T>> Tree<T> withNaturalOrder() {
return new Tree<>(Comparator.naturalOrder());
}

然后像这样调用

Tree<String> tree = Tree.withNaturalOrder();

关于java - 如何使我自己的通用结构具有动态比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58577927/

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