デバッグ用の小ネタ。Listに値が追加されたタイミングを追う方法。
public class Foo {
public List<String> list = new ArrayList<>();
}
上記のようなListにいつ値が追加されたか監視したい場合、以下のように無名クラスに書き換えてadd
メソッドをオーバーライドすると、値が追加されたタイミングでログ出力したり、ブレイクポイントで処理を止めることができる。
public class Foo {
public List<String> list = new ArrayList<String>() {
@Override
public boolean add(String string) {
// ここにブレイクポイントをつければ、値が追加されたタイミングで処理を止められる
System.out.println("addされました:" + string);
return super.add(string);
}
};
}
add
だけでなく remove
など他の処理も拡張可能。
あくまでちょっとしたデバッグ用。
そういえば
無名クラスと初期化ブロックを使ってListの初期化をすることができる。
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
上記は以下のように書ける。
List<String> list = new ArrayList<String>() {{
add("1");
add("2");
add("3");
}};
若干タイプ数は減るものの、初心者に優しくないのでチーム開発で使うのはおすすめしない(普通こんなことしないと思うが。。。)