質問: 例えば、java.awt.event.ActionListener のような、抽象メソッドが1つのみのInterafaceは FunctionInterfaceの条件を満たしているため、ラムダを使うことができますが、 将来的に抽象メソッドが追加された場合、ラムダの部分がコンパイルエラーになると思います。 FunctionInterfaceアノテーションがついていない場合、追加されても文句が言えないため、 ラムダを使わない方が無難でしょうか? みなさんの考えを教えてください。
回答: FunctionInterfaceアノテーションは、オーバーライド時のOverrideアノテーションと同様、コンパイラがそのアノテーションの条件を満たすことを保証しているにすぎません。 仮に抽象メソッドが追加されたとしたら、そのアノテーションを消すだけでコンパイルが通ります。それにラムダでなく匿名クラスとして渡したとしてもエラーになります。 結局、ラムダであろうがなかろうが同じことになるので、ラムダでも別に問題ないかと思います。