私は、Javaのラムダはチェック例外をスローすることはできませんが、RuntimeExceptionをスローすることができることを理解していますが、なぜ下のコードは角かっこを必要としますか?ランタイム例外をスローするJavaラムダに角括弧が必要なのはなぜですか?
Map<String, Integer> m = new HashMap<>();
Integer integer = m.computeIfAbsent("", s -> {throw new IllegalArgumentException("fail");});
なぜあなたは持っていないのですか?
m.computeIfAbsent("", s -> throw new IllegalArgumentException("fail"));
それが原因、それはこの例ではint型を返すコンパイラの前提にされているので、そのためには、そのが投げていても、例外のリターンを持つことができませんか?
基本的に、 's-> expr'形式は式のためだけに機能します。 'throw'はステートメントです。 – ZhongYu
ああ、これは意味がある、あなたがそれを答えに入れるなら、私はマークされた答えとしてそれを入れます – Ash
また[this](http://stackoverflow.com/q/41482574/2711488)と[that] http://stackoverflow.com/q/24146285/2711488)... – Holger