【问题标题】:Comparator reversed() is resulting in compiler error [duplicate]比较器 reversed() 导致编译器错误 [重复]
【发布时间】:2018-03-24 06:29:20
【问题描述】:

假设类结构如下:

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() 被删除了。

【问题讨论】:

标签: java generics polymorphism comparator


【解决方案1】:

你可以在这里找到类似的问题: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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多