1 回答
TA贡献1802条经验 获得超10个赞
让我们看看你的ComponentCreator
private static class ComparatorCreator<T extends Comparable<? super T>>{
public Comparator<? extends T> getComparator()
{
return T::compareTo;
}
}
如果稍微改变一下以使你的错误更清楚
private static class ComparatorCreator<T extends Comparable<? super T>>{
public Comparator<? extends T> getComparator()
{
return (o1, o2) -> {
return o1.compareTo(o2);
};
}
}
您使用的方法引用与我的 lambda 相同,但它使错误更加明显。如果我们一一检查您的样品,我们可以看到以下内容:
comp.compare(bbig, bsmall); // calls bbig.compareTo(bsmall)
comp.compare(bbig, small); // calls bbig.compareTo(small)
comp.compare(big, small); // calls big.compareTo(small)
comp.compare(big, bsmall); // calls big.compareTo(bsmal)
您收到的输出是有意义的,因为big.compareTo()将调用compareTo()该类的函数Integer。
添加回答
举报