ラムダパラメーターに名前を付けてみました_
、例: (縮小版):
Consumer<Object> c = _ -> {};
パラメータが無視されていることを示したかったのですが、次のコンパイラエラーが発生しました。
ラムダパラメーターの識別子としての「_」の使用は禁止されています
これは私にとって驚きでした。興味深いことに、twoアンダースコアはOKです:
Consumer<Object> c = __ -> {}; // no compile error
したがって、これは一般的にアンダースコア文字ではなく、単一の文字です。
単一アンダースコアの名前が特に禁止されているのはなぜですか?
理由は この投稿 から Brian Goetz 彼自身で表されます:
将来の言語機能で使用するために、識別子のスペースから「_」の構文上の領域を「再利用」しています。ただし、それを使用する可能性のある既存のプログラムがあるため、8の既存の構文位置で発生する識別子に対する警告であり、ラムダ形式のエラーです(ラムダを含む既存のコードがないため)。