Rozumiem, że lambda w języku Java nie może przesłać sprawdzonego wyjątku, ale może rzucić wyjątek RuntimeException, ale dlaczego poniższy kod wymaga nawiasów?Dlaczego Lambda Java, która zgłasza wyjątek Runtime, wymaga nawiasów?
Map<String, Integer> m = new HashMap<>();
Integer integer = m.computeIfAbsent("", s -> {throw new IllegalArgumentException("fail");});
Dlaczego nie możesz?
m.computeIfAbsent("", s -> throw new IllegalArgumentException("fail"));
Czy to ze względu na założeniu kompilatora, że powróci w tym przypadku int, więc do nich nie może mieć zwrot wyjątek, choć jego wyrzucony?
Zasadniczo, formularz 's-> expr' działa tylko dla wyrażeń. 'throw' jest stwierdzeniem. – ZhongYu
ah, to ma sens, jeśli umieścisz to w odpowiedzi, umieści to jako zaznaczoną odpowiedź – Ash
Możesz także przeczytać [to] (http://stackoverflow.com/q/41482574/2711488) i [to] (http://stackoverflow.com/q/24146285/2711488)... – Holger