В Java (используя Java 8 в настоящее время), я могу написать это, и все будет компилироваться хорошо и хорошо:
Supplier<Long> asd = () -> {
throw new RuntimeException();
};
Но я не могу написать это:
Supplier<Long> asd = () -> throw new RuntimeException(); // This won't compile :(
Кто-нибудь знает, почему реализация Java не допускает такой стиль (выражение lambda) и только стиль lambda в стиле оператора/кода?
Я имею в виду, поскольку лямбда только бросает RuntimeException, почему JDK не может вывести выражение лямбда как:
new Supplier<Long>() {
@Override
public Long get() {
throw new RuntimeException();
}
};
Является ли это документированным где-то в спецификациях/документах? Это добавлено только в JDK> 8?