当类实现相同的接口时,Lambda表达式因LambdaConversionException而失败? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当类实现相同的接口时,Lambda表达式因LambdaConversionException而失败? [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我很惊讶,为什么lambda表达式无法在运行时正确调用。这是一个类型推断错误?工作aournd示例取消注释显式类型参数声明。
public class LambdaConversionTest {
@Test
public void whyDidLambdaExpressionFailsWithLambdaConversionException() {
try {
// v--- when uncomment it, the behavior is what I expected
Stream./*<Collector>*/of(new Robot(), new Puller())
.flatMapToInt(Collector::stream).sum();
fail("fails with expected behavior");
} catch (BootstrapMethodError why) {
assertThat(why.getCause().getMessage()
,containsString("Invalid receiver type interface "));
}
}
interface Marker {
}
interface Collector {
IntStream stream();
}
class Robot implements Collector, Marker {
@Override
public IntStream stream() {
return IntStream.empty();
}
}
class Puller implements Collector, Marker {
@Override
public IntStream stream() {
return IntStream.empty();
}
}
}
答案
对于这个特殊的this JDK bug实例,应该注意的是,如果你在Marker
之后声明接口Collector
它不会失败
失败:
interface Marker {}
interface Collector {
IntStream stream();
}
通过:
interface Collector {
IntStream stream();
}
interface Marker {}
以上是关于当类实现相同的接口时,Lambda表达式因LambdaConversionException而失败? [重复]的主要内容,如果未能解决你的问题,请参考以下文章