java.util.comparator_java.util.Comparator.naturalOrder接受一个>并返回一个Comparator – 为什么?...

(如果这是重复的,请指出我正确的答案!我搜索并阅读了几个(> 5)相关问题,但似乎没有出现在标记上.还查看了泛型常见问题和其他来源…)

显然正确的做法是,当集合类采用比较器时,它应该具有类型Comparator对于你的参数化类型T.你可以看到很多地方,例如TreeMap.好的.

我的问题是使用Comparator.naturalOrder(),它是在T扩展Comparable但返回一个Comparator< T>.我正在尝试在我的集合类中有一个字段,它包含用户指定的比较器或Comparator.naturalOrder比较器.

我无法让它发挥作用.我的问题都是相关的:

> Comparator.naturalOrder如何正确使用?

>我可以做我想要的那个有存储用户提供的比较器或naturalOrder比较器的字段吗?

>鉴于大多数集合类(在框架中)都参数化了T而不是T实现了Comparable,所以这是选择的设计模式,naturalOrder如何有用,因为它需要后一个有界通配符,而不是无约束类型参数?

谢谢!

下面是编译器错误的实际示例:

所以:如果我在某些类中有这样的代码,其中T没有边界(如在所有现有的集合类中):

class Foo {

private Comparator super T> comparator;

public void someMethod(Comparator super T> comparator)

{

this.comparator = comparator; // no compile error

this.comparator = Comparator.naturalOrder(); // incompatible types

}

}

有这个错误:

Error:(331, 50) java: incompatible types: inferred type does not conform to upper bound(s)

inferred: T

upper bound(s): java.lang.Comparable super T>

那么如果我决定放弃优势呢?超级T然后我有:

class Foo {

private Comparator comparator;

public void someMethod(ComparatorT> comparator)

{

this.comparator = comparator; // no compile error

this.comparator = Comparator.naturalOrder(); // incompatible types

}

}

我在哪里

Error:(nnn, 50) java: incompatible types: inference variable T has incompatible bounds

equality constraints: T

upper bounds: java.lang.Comparable super T>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值