Java

[Java小ネタ]Listに値が追加されるタイミングを監視する

デバッグ用の小ネタ。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");
}};

若干タイプ数は減るものの、初心者に優しくないのでチーム開発で使うのはおすすめしない(普通こんなことしないと思うが。。。)