Неверный тип в стеке операндов… при использовании jdk 8, лямбда-выражения с анонимными внутренними классами не работают, почему?
Выполнение кода ниже приводит к сообщению об ошибке.Bad type on operand stack
public static void main(String args[]) {
TransformService transformService = (inputs) -> {
return new ArrayList(3) {{
add("one");
add("two");
add("three");
}};
};
Collection inputs = new HashSet(2) {{
add(5);
add(7);
}};
Collection results = transformService.transform(inputs);
System.out.println(results.size());
}
public interface TransformService {
Collection transform(Collection inputs);
}
Однако удаление инициализации с двойной скобкой (анонимные внутренние классы) в lamda позволяет коду работать должным образом, почему? Ниже работает:
public class SecondLambda {
public static void main(String args[]) {
TransformService transformService = (inputs) -> {
Collection results = new ArrayList(3);
results.add("one");
results.add("two");
results.add("three");
return results;
};
Collection inputs = new HashSet(2) {{
add(5);
add(7);
}};
Collection results = transformService.transform(inputs);
System.out.println(results.size());
}
public interface TransformService {
Collection transform(Collection inputs);
}
}
Ошибка компилятора? В конце концов, это ранняя версия доступа ...
(Это выигралт, если у вас нет последней версииJDK 8 Lambda скачать.)