導入
Javaでプログラミングをしていると、「一度しか使わないクラスのために、わざわざ名前をつけて別ファイルを作るのは面倒だな」と感じることはありませんか?そんな時に役立つのが「匿名クラス(Anonymous classes)」です。匿名クラスを使うことで、コードを簡潔にまとめ、プログラムの可読性を高めることができます。今回は、この便利な機能の仕組みと使い方を、シニアエンジニアの視点で解説します。
基礎知識
匿名クラスとは、その名の通り「名前を持たないクラス」のことです。通常、クラスは「クラス名」が必要ですが、匿名クラスは「クラスの定義」と「インスタンス化」を同時に行うことで、名前を省略します。
ここで重要なのが「多態性(ポリモーフィズム)」です。匿名クラスは、特定のクラスを継承したり、インターフェースを実装したりすることで作成します。Java 8以降は「デフォルトメソッド」や「プライベートインターフェースメソッド」が導入され、インターフェースがより強力になりました。これらを利用することで、匿名クラスはさらに柔軟に動作をカスタマイズできるようになります。
実装/解決策
匿名クラスを作成する手順は非常にシンプルです。
1. 親となるクラスやインターフェースを指定する。
2. インスタンス化の際に、波括弧 {} を記述し、その中でメソッドをオーバーライドする。
これにより、既存のクラスの挙動を「その場だけ」変更することができます。
サンプルプログラム
以下のコードは、インターフェースを実装した匿名クラスの例です。コピーして実行してみてください。
public class Main {
// 挨拶用のインターフェース
interface Greeter {
void greet();
// デフォルトメソッド(匿名クラスでもそのまま使えます)
default void sayGoodbye() {
System.out.println("さようなら!");
}
}
public static void main(String[] args) {
// 匿名クラスの作成
// 名前をつけずに、その場でGreeterインターフェースを実装
Greeter myGreeter = new Greeter() {
@Override
public void greet() {
System.out.println("こんにちは!匿名クラスから挨拶します。");
}
};
// メソッドの実行
myGreeter.greet();
myGreeter.sayGoodbye();
}
}
応用・注意点
匿名クラスを使う際の注意点をいくつか挙げます。
1. 可読性のトレードオフ
コードを短くできますが、複雑な処理を匿名クラスの中に詰め込みすぎると、逆に読みづらくなります。「数行程度のシンプルな実装」に留めるのが現場での鉄則です。
2. ラムダ式との使い分け
Java 8以降、単一の抽象メソッドを持つインターフェース(関数型インターフェース)であれば、匿名クラスよりも「ラムダ式」の方が圧倒的に短く書けます。もしオーバーライドするメソッドが1つだけなら、ラムダ式を優先しましょう。
3. 継承とオーバーライド
匿名クラスは既存のクラスを継承して作成することも可能です。しかし、あまりに多くのメソッドをオーバーライドすると、どこで何をしているのか追跡が困難になります。あくまで「一部の挙動を変えたい」という場面で活用するのがベストです。
適切に使えば、あなたのコードはよりスマートで洗練されたものになります。ぜひ実際のプロジェクトで試してみてください。

コメント