Eclipse或Javac错误;lambda型推理

Eclipse或Javac错误;lambda型推理,java,eclipse,lambda,language-lawyer,Java,Eclipse,Lambda,Language Lawyer,以下代码使用javac和Eclipse 4.6.1/4.6进行编译,但在Eclipse 4.6.2中产生错误: package ecbug; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Foo { class A { public int getStart() { return 0; } } voi

以下代码使用javac和Eclipse 4.6.1/4.6进行编译,但在Eclipse 4.6.2中产生错误:

package ecbug;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Foo
{
    class A
    {
        public int getStart() { return 0; }
    }

    void someMethod(List<A> toRemove)
    {
        Collections.sort(toRemove, Comparator.comparing(t -> -t.getStart()));
    }
}
packageecbug;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公开课Foo
{
甲级
{
public int getStart(){return 0;}
}

void someMethod(返回
int
)的列表。Eclipse似乎认为lambda函数应该返回Comparable您的解释没有正确。Comparator.comparating(…)
(单参数版本)的参数不应该是一个
可比的
,而是一个
功能。在过去的几年里,我已经看到了几个类似的问题。你真的进行了彻底的搜索吗?@T.J.Crowder很难为如此具体的东西找到正确的搜索词,但是我搜索了一段时间,是的。有一些问题可能会显示相关的信息ed error(例如),但我找不到任何与语言规范相关的内容,这正是我在这里要求的。为我编译无误(Eclipse 4.6)@ThomasFritsch确实,它似乎已随最新的Eclipse JDT发生了更改:版本3.12.2.v20161124-1400-这是4.6.2更新的一部分(4.6.1和4.6成功编译代码)但是,根据语言规范,哪种行为是正确的,这仍然是一个悬而未决的问题。我已经提交了一个Eclipse错误,看看开发人员说了什么。是的,我对
Comparator.comparating(…)的参数类型感到困惑
。这一切听起来都是正确的,但我会等待Eclipse错误的响应,然后再接受;谢谢。关于
comparingit
的使用,我知道这一点,但从中派生测试用例的原始代码不是我的代码。它被标记为另一个错误的副本——那里的注释很有趣,例如“…当提到Fiθ时,javac首先执行一个未指定的替换:所有已经实例化的推理变量都被它们各自的实例化所替换。”“…JDK-8052325要求我们不要生成进一步的约束。缺少这些约束是导致此bug中的示例失败的原因。”()。似乎存在一些规范问题。请接受您的答案。
Collections.sort(toRemove, Comparator.comparingInt(A::getStart).reversed());