我有一个非常类似的问题,如这个未回答的问题所述: 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版本)。