这个问题在这里已经有了答案:
Comparator.reversed() does not compile using lambda
(4 个回答)
4个月前关闭。
假设以下类结构:
abstract class Animal<A extends Animal<A>>
{
... someAbstractMethodDefinitions
}
class Duck<D extends Duck<D>> extends Animal<D>
{
public int getBeekSize()
{
return beekSize;
}
public int getHeadSize()
{
return headSize;
}
}
class Mallard extends Duck<Mallard>
{
.. someCode
}
然后,假设我有一份鸭子列表(不一定是野鸭),我想通过比克大小来比较鸭子。换句话说,我想做:
List<Duck> ducks = Arrays.asList(new Duck(), new Duck(), ...);
Collections.sort(
ducks,
Comparator.comparing(Duck::getBeekSize).reversed());
当我尝试这样做时,我得到编译器错误:“不能在静态上下文中引用非静态方法”。如果我删除
.reversed()
它工作得很好,一切都能正确编译和运行。以下代码有效:List<Duck> ducks = Arrays.asList(new Duck(), new Duck(), ...);
Collections.sort(
ducks,
Comparator.comparing(Duck::getBeekSize));
换句话说,为什么我可以添加
reversed()
给我的Comparator
?两个代码块之间的唯一区别是 .reversed()
已移除。
最佳答案
你可以在这里找到类似的问题:Comparator.reversed() does not compile using lambda
解决方案是做这样的事情:
Collections.sort(ducks, Comparator.comparing((Duck d) -> d.getHeadSize()).reversed());
编辑:
添加与此问题相关的错误:
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8025138
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8025290
关于java - 比较器 reversed() 导致编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49461945/