【发布时间】:2018-02-28 13:45:18
【问题描述】:
我很惊讶,为什么无法在运行时正确调用 lambda 表达式。是类型推断错误吗? 工作示例是取消注释显式类型参数声明。
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();
}
}
}
【问题讨论】:
-
@Holger 先生,谢谢您将问题标记为重复。好工作。我找了一会儿,但找不到足够的答案。