gpt4 book ai didi

java - 构造函数中的附加类型界限

转载 作者:行者123 更新时间:2023-12-01 17:58:42 24 4
gpt4 key购买 nike

假设我有一个这样的类(class):

class OrderedFoo<T> {

public OrderedFoo(Comparator<? super T> comparator) {
//Do something
}

}

我可以将其用于不可比较的对象,因为实现 Comparable 不需要类型参数.

我也可以将其用于类似的对象,利用 Comparator#naturalOrder .

示例:

OrderedFoo<Watchable> nonComparable = new OrderedFoo<>((a, b) -> foo());
OrderedFoo<String> comparable = new OrderedFoo<>(Comparator.naturalOrder());

但是,必须为可比较类型指定默认比较器会变得有些乏味。是否可以编写一个带有仅接受可比较类型的类型参数的构造函数?

//Like this
public <???> OrderedFoo() {
this(Comparator.naturalOrder());
}

我试过<T extends Comparable<? super T>>但我明白

(java.util.Comparator<? super T>)
in OrderedFoo cannot be applied to
(java.util.Comparator<T>)

这可以通过构造函数实现吗?

最佳答案

您不能直接使用构造函数来执行此操作,因为该构造函数必须适用于所有类型;但您希望它仅适用于Comparable类型。

使用带有适当约束的类型变量的静态工厂方法:

public static <T extends Comparable<T>> OrderedFoo<T> naturalOrder() {
return new OrderedFoo<>(Comparator.naturalOrdering());
}

关于java - 构造函数中的附加类型界限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42575419/

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