2019-05-14  Java プログラミング

Eclipseのコード補完でラムダ式を入力する

Eclipse 2019-06 でラムダ式のコード補完機能が強化されたということなので試してみました。使用したのは開発中のマイルストーン バージョン Eclipse 2019-06 M2 です。Eclipse 2019-06 の正式リリースは 2019 6 19 日の予定です。

結論から言うと Eclipse 2019-06 のコード補完機能でラムダ式を直接入力することはできませんでした。Java 統合開発環境として競合関係にある IntelliJ IDEA では コード補完機能でラムダ式をスマートに入力できるようになっているので Eclipse にも頑張って欲しいところです。

コード補完機能でラムダ式を直接入力することはできませんでしたが Eclipse 2019-06 では匿名クラスをラムダ式に変換する機能が追加されました。この機能を使って

  1. コード補完機能で匿名クラスを挿入する
  2. 匿名クラスをラムダ式に変換する

という手順を踏むことで 結果としてラムダ式を自動入力することができました。

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 切磋琢磨してどちらもより良いプロダクトになっていって欲しいです。

最終更新日 2024-12-13
この記事を共有しませんか?
ブックマーク ポスト