java - 比较器 reversed() 导致编译器错误

标签 java generics polymorphism comparator

这个问题在这里已经有了答案:





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/

相关文章:

java - 依赖什么 Spring Artifact 来创建 Bean?

java - 无法从实现接口(interface)的类中实现方法?

java - 存在原始打字问题

Java泛型歇斯底里

java - 在不实例化(未知)具体类型的情况下从方法返回接口(interface)对象

c# - 派生属性?

java - 如何使用自定义比较器比较两个数组列表是否相等?

java - 请帮助我在 AlertDialog 中设置上下文菜单

java - 无法获取要打印的 java 变量

c# - 使用 OrderBy() 后返回正确的类型