Lambda表达式在Eclipse Luna中导致警告

时间:2014-11-18 13:07:37

标签: java eclipse lambda

我有一个非常类似的问题,如这个未回答的问题所述: Nested lambda expressions results in a warning in Eclipse Luna

我正在使用Eclipse Luna(Service Release 1,4.4.1)和Windows 7以及Java 8(jdk 1.8.0_05)。以下(已编辑)代码:

Collections.sort(new LinkedList<>(), (c1, c2) -> {
    return c1.equals(c2)? 1 : 0;
});

收到警告:

(Recovered) Internal inconsistency detected during lambda shape analysis

警告分配给代码的这一部分:“(c1,c2) - &gt;”。

注意:有趣的是,省略return语句的较短版本编译正常,没有任何警告:

Collections.sort(new LinkedList<>(), (c1, c2) -> c1.equals(c2)? 1 : 0);

对于明确给出c1和c2类型的代码也是如此

Collections.sort(new LinkedList<>(), (Object c1, Object c2) -> {
    return c1.equals(c2)? 1 : 0;
});

这里发生了什么? (我不相信这个错误建议:https://bugs.eclipse.org/bugs/show_bug.cgi?id=432110(在相关问题的评论中给出)有任何帮助,因为在错误的上下文中会发出警告。)

编辑:以上代码是MWE,导致问题的原始代码如下所示:

    Collections.sort(list, (c1, c2) -> {
        Method m1 = this.allMethods.get(c1);
        Method m2 = this.allMethods.get(c2);

        int c = new Integer(m1.getParameterCount()).compareTo(
                new Integer(m2.getParameterCount()));

        if (c == 0) {
            Integer i1 = 0;
            Integer i2 = 0;
            if (ConstructorFactory.isTypeAcceptable(m1.getReturnType())) {
                i1 = 1;
            }
            if (ConstructorFactory.isTypeAcceptable(m2.getReturnType())) {
                i2 = 1;
            }

            c = i1.compareTo(i2);
        }

        if (c == 0) {
            c = m1.getName().compareTo(m2.getName());
        }

        return c;
    });

编辑2: Eclipse Kepler没有显示此警告(相同的Java版本)。

0 个答案:

没有答案