タイプセーフなアクションリスナ
Clickではボタンが押されたときに呼び出すメソッドを文字列で指定します。例えばページクラスで以下のようにSubmitコントロールを初期化すると、ボタンが押されたときにページクラスのclicked()メソッドが呼び出されます。
この方法はとてもお手軽なのですが、メソッドを文字列で指定しているのでタイプミスをしたり、リファクタリングでメソッド名を変更したりした場合に実行するまでわからないという問題があります。IDEではリファクタリング時に文字列やコメントに含まれたメソッド名なども抽出してくれるものがありますが、やはりコンパイル時の型チェックに頼れる部分は頼りたいところです。
というわけで、ClickのMLでMikeというユーザがアクションリスナの導入を提案したのですが、MalcolmはやはりClickのAPIはシンプルに保ちたいということで却下されてしまいました。が、MLではその後も代替案の議論が行われ、以下のような技が編み出されました。まずはアクションの基底クラスを用意しておきます。
以下のようにして使います。
これでタイプセーフなアクションリスナと同等のことができるようになります。Clickのディストリビューションに含まれることはないと思いますが、これなら簡単に実現できます。このアイデアを思いついたChristianに拍手。