Java 9の匿名クラスでダイヤモンド演算子(<>)を使う方法を解説
ダイヤモンド演算子は、コードの可読性を高めるためにJava 7で導入された機能です。しかし、当時は匿名内部クラス(anonymous inner class)には使用できませんでした。Java 9からは、この制限が撤廃され、匿名クラスでもダイヤモンド演算子が使えるようになり、コードがより簡潔で読みやすくなりました。
Java 9でのダイヤモンド演算子の使い方
Java 9では、以下のように匿名クラス内でダイヤモンド演算子 <> を記述できます。コンパイラが代入先の型から適切な型引数を推論してくれるため、冗長な型指定を省略できます。
サンプルコード
public class DiamondOperatorTest {
public static void main(String args[]) {
// Integer型として推論される
Handler<Integer> intHandler = new Handler<>(1) {
@Override
public void handle() {
System.out.println(data);
}
};
intHandler.handle();
// Number型のワイルドカードとして推論される
Handler<? extends Number> intHandler1 = new Handler<>(2) {
@Override
public void handle() {
System.out.println(data);
}
};
intHandler1.handle();
// 非境界ワイルドカードとして推論される
Handler<?> handler = new Handler<>("test") {
@Override
public void handle() {
System.out.println(data);
}
};
handler.handle();
}
}
abstract class Handler<T> {
public T data;
public Handler(T data) {
this.data = data;
}
abstract void handle();
}
実行結果
1 2 test
ポイント解説
この例では、抽象クラス Handler<T> を継承した匿名クラスを3つ作成しています。
- Handler<Integer>: 具体的な型パラメータを指定した場合。ダイヤモンド演算子により、
new Handler<>(1)の部分で型引数が自動的にIntegerと推論されます。 - Handler<? extends Number>: 境界付きワイルドカードの場合。代入先の型情報をもとに型が推論されます。
- Handler<?>: 非境界ワイルドカードの場合。文字列 "test" を渡しても問題なく動作します。
このように、Java 9以降では匿名クラスとダイヤモンド演算子を組み合わせることで、ジェネリクスを使ったコードをより短く、可読性の高いものにできます。ただし、匿名クラスでダイヤモンド演算子を使用する際は、代入先の変数に明示的な型が宣言されている必要がある点に注意してください。
-
Javaでサブメニュー付きのJPopupMenuを作成する方法
JPopupMenuはJComponentクラスのサブクラスであり、画面上の任意の場所で右クリックされたときに表示されるポップアップメニューを実装するためのクラスです。ポップアップメニューを作成するには、JPopupMenuクラスを使用します。通常、JPopupMenuにはメニューアイテム(JMenuItem)を追加しますが、サブメニューを追加することも可能です。サブメニューを追加する手順は、まずサブメニュー(JMenu)にメニューアイテムを追加し、その後、完成したサブメニューをJPopupMenuに追加するという流れになります。ポップアップメニューはマウスイベントによって起動されるため、Mo
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー