最近の開発者は匿名クラスを知らない

最近の開発者は,内部クラスは使ったことがあっても,匿名クラスを使ったことがない(あるいは知らない)らしい。 匿名クラスは,JDK1.1から採用された文法である。簡単な例は,下記のような感じ。

JButton btnOk = …;btnOk.addActionListener(new ActionListener() {  public void actionPerformed(ActionEvent event) {    // イベント処理  }});

このように記述することによって,例えば上記のコードがHogeFrameクラス内に記述されたものであれば,

class HogeFrame$1 implements ActionListener {  … }

というクラスがコンパイラによって自動的に生成される。 この匿名クラスは,AWTやSwingを使ったGUIプログラミングを行いやすくするために考え出された文法と言い切って良いだろう。まず,イベントリスナの実装クラスを内部クラスとして作成する手間を省略できる。GUIアプリケーションにおいて,イベントリスナの登録は「処理の登録」である。しかし,Javaだとオブジェクト単位でしか扱えないため,せめて文法上は処理を登録しているように記述できるように,とうい思惑がある。上記のコードを見ると,そんな雰囲気は伝わると思う。 GUIプログラミングの特徴として,GUIコンポーネントのオブジェクトがステートフルな状態で保持されるため,GUIコンポーネントから発生したイベントに対する処理を受け持つリスナオブジェクトを,GUIコンポーネントのオブジェクトに保持させてコールバックさせるというObserverパターンが素直に適用できることがあげられる。しかし,Webアプリケーションでは,HTTPリクエストの受付と,それに伴って呼び出される処理が,メソッド呼び出しの連鎖で行われる「手続き」的な構成になるので,処理をオブジェクトとしてコンポーネントに登録しておくという発想ではない。 そのために,Webアプリケーション開発では,匿名クラスを使う機会がほとんどないのが実情である。匿名クラスというものを知らない,あるいは知る機会が得られないことも,Webアプリケーション開発がJava案件のほとんどを占めていることに原因がある。 GUIプログラミングの経験者は,匿名クラスはほぼ必須の科目なので,知っていて当然である。しかし,現在の開発者の多くが匿名クラスという名前自体知らないことも多く,非常に残念である。 単体テストのコードを書く際には,匿名クラスを使ったテクニックが非常に有効だったりするので,Javaプログラマと自分を称するのであれば,匿名クラスは知っていて欲しいものだ。。。

このエントリーをはてなブックマークに追加

関連記事

40%キーボードに慣れるためにやったこと

Lunakey PicoでQMK Firmwareを動かしてみました

Googleアシスタント向け会話型アクションが1年後にシャットダウンされます

Google I/O 2022でのGoogleアシスタント関連のセッション

Remap Organizations feature has been released