Eclipse 2019-06 でラムダ式のコード補完機能が強化されたということなので試してみました。使用したのは開発中のマイルストーン ・ バージョン Eclipse 2019-06 M2 です。Eclipse 2019-06 の正式リリースは 2019 年 6 月 19 日の予定です。
結論から言うと、 Eclipse 2019-06 のコード補完機能でラムダ式を直接入力することはできませんでした。Java 統合開発環境として競合関係にある IntelliJ IDEA では、 コード補完機能でラムダ式をスマートに入力できるようになっているので、 Eclipse にも頑張って欲しいところです。
コード補完機能でラムダ式を直接入力することはできませんでしたが、 Eclipse 2019-06 では匿名クラスをラムダ式に変換する機能が追加されました。この機能を使って
- コード補完機能で匿名クラスを挿入する
- 匿名クラスをラムダ式に変換する
という手順を踏むことで、 結果としてラムダ式を自動入力することができました。
Eclipseでラムダ式を自動入力する手順
java.util.List
クラスの sort
メソッドに、 ラムダ式で Comparator
を入力する手順を試してみます。
sort
まで入力すると候補が表示されます。ここにラムダ式が候補として表示されることを期待していたのですが、 そうなってはいませんでした。残念です。
そのまま、 sort(new
まで入力して Ctrl + Space を押すと、 候補に Comparator
インターフェースが表示されます。
候補 Comparator
インターフェースが選択されている状態で Enter を押すと、 Comparator
インターフェースを実装する匿名クラスが挿入されます。残念なことに仮型引数が <T>
となってしまっています。List<String>
クラスを使用しているので、 仮型引数も自動的に <String>
となって欲しいところです。
仕方がないので、 T
を削除して、 Ctrl + 1 を押します。このショートカットキーはデフォルトで Quickfix に割り当てられています。
Quickfix に Insert inferred type arguments
という修正候補が表示されています。これは Eclipse 2019-06 で新たに追加された機能です。推論された引数の型を自動的に挿入することができます。
Insert inferred type arguments
を選択して Enter を押します。
Comparator
の仮型引数が自動的に <String>
になりました。すごいです! (これができるのなら最初から <T>
ではなく <String>
を追加してくれても良いのでは?)
もう一度、 Ctrl + 1 を押して Quickfix を呼び出します。修正候補に表示されている Add unimplemented methods
を選択して Enter を押します。これは従来からあるインターフェースや抽象クラスの未実装メソッドの雛形を追加してくれる機能ですね。
compare
メソッドの雛形が追加されて、 Comparator
インターフェースを実装した匿名クラスが完成しました。
さらにもう一度、 Ctrl + 1 を押して Quickfix を呼び出します。今度は、 Convert to lambda expression
という修正候補が表示されています。これを選択して Enter を押します。
ラムダ式になりました!
手順が多く、 「ラムダ式が簡単に書ける」 とは言えませんが、 引数の数を覚えていないような場合には役に立つと思います。JDK ソースコードの Comparator
インターフェース compare
メソッドのシグネチャーを元に自動的に仮引数名が o1
と o2
に設定されるというのも便利です。
おまけ
ついでに、 Eclipse 2019-06 で追加されたいくつかの機能を見てみましょう。
ラムダ式 引数の型を明示する
ラムダ式では引数の型を省略することができますが、 コードを短縮しすぎていて分かりにくいこともあると思います。そんなときは、 Ctrl + 1 で Quickfix を呼び出して Add inferred lambda parameter types
です。
仮引数 o1
、 o2
に型 String
が明示されました。
ラムダ式をブロックにする
ラムダ式が 1 つの式だけから成る場合は return
も省略して、 そのまま式を記述することができます。でも実際は複数の式や文を書くことも多いです。そんなときは、 Ctrl + 1 で Quickfix を呼び出して Change body expression to block
です。
ラムダ式が単一の式からブロック { }
に変わります。
このくらいの冗長性があればラムダ式を使っていてもソースコードの可読性を維持できそうです。
他にも、 ラムダ式から匿名クラスに変換する Convert to anonymouse class creation
や、 ラムダ式の引数の型を省略する Remove lambda parameter types
など今回説明したのと逆の操作を行う Quickfix もあります。いろいろと試してみてください。
IntelliJ IDEA の場合
最後に、 IntelliJ IDEA でラムダ式を入力する方法を紹介しておきます。使用したのは IntelliJ IDEA Community 2019.1 です。
sort
まで入力すると、 Comparator
を引数に取る sort
メソッドが候補として表示されます。ここまでは Eclipse と同じですね。
IntelliJ IDEA では、 (
を入力して Ctrl + Space を押すと、 ラムダ式やメソッド参照も候補として表示されます。これはすごい!
候補の中からラムダ式を選択して Enter を押すと、 ラムダ式が自動的に追加されます。仮引数名もきちんと o1
と o2
になっていますね。
Eclipse と IntelliJ IDEA、 切磋琢磨してどちらもより良いプロダクトになっていって欲しいです。