Java Comparator reversed()导致编译器错误

Java Comparator reversed()导致编译器错误,java,generics,polymorphism,comparator,Java,Generics,Polymorphism,Comparator,假设类结构如下: abstract class Animal<A extends Animal<A>> { ... someAbstractMethodDefinitions } class Duck<D extends Duck<D>> extends Animal<D> { public int getBeekSize() { return beekSize; } p

假设类结构如下:

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
}

换句话说,为什么我可以在比较器中添加一个反向?这两个代码块之间的唯一区别是删除了.reversed。

您可以在此处找到类似的问题:

解决方案是这样做:

Collections.sort(ducks, Comparator.comparing((Duck d) -> d.getHeadSize()).reversed());
编辑:

添加与此问题相关的错误:


用MCVE。你能发一张MCVE吗?或者,如果我的示例不适合您,请发布您正在使用的Java版本。谢谢,这比完全匿名比较器要好得多。我确实看到了这个链接,但还没有意识到它是相关的。非常感谢。
List<Duck> ducks = Arrays.asList(new Duck(), new Duck(), ...);
Collections.sort(
        ducks,
        Comparator.comparing(Duck::getBeekSize));
Collections.sort(ducks, Comparator.comparing((Duck d) -> d.getHeadSize()).reversed());