Всем привет!
Вот такой незамысловатый код:
public class Test {
public static void main(String[] args) {
final Function2<Integer, Integer, Integer> add = (x, y) -> (x + y);
final Function1<Integer, Integer> inc = (x) -> (add.apply(x, 1));
System.out.println(inc.apply(0));
}
@FunctionalInterface
public static interface Function1<R, A> {
R apply(A input);
}
@FunctionalInterface
public static interface Function2<R, A1, A2> {
R apply(A1 input1, A2 input2);
}
}
cкомпилировался но...
Exception in thread «main» java.lang.VerifyError: Bad return type Exception Details: Location: Test.lambda$main$1(LTest$Function2;Ljava/lang/Integer;)Ljava/lang/Integer; @11: areturn Reason: Type 'java/lang/Object' (current frame, stack[0]) is not assignable to 'java/lang/Integer' (from method signature) Current Frame: bci: @11 flags: { } locals: { 'Test$Function2', 'java/lang/Integer' } stack: { 'java/lang/Object' } Bytecode: 0000000: 2a2b 04b8 0005 b900 0803 00b0
at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:259) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113)
Я отправил баг-репорт 10/19/12 на что получил подтверждение - «Your Report (Review ID: 2361784)». В итоге баг-репорт похоже не приняли, скорее всего из-за того, что я плохо его составил.
Суть в том, что уже developer preview, а ошибка никуда не делась. Если такой код не должен работать, то, наверно, он не должен и компилироваться.
Буду очень признателен тому, кто объяснит почему пример валится в рантайме.