2011年5月7日土曜日

オブジェクトの中身を無理矢理Dumpする。

PHPにはvar_dumpだのprint_rだの
オブジェクトの中を確認する便利な関数がありますが、Javaにはないっぽいです。
System.out.println(target.toString());
こいつで吐き出してくれればわかりやすいのですが・・・そういうわけにもいきません。
というわけで、Reflectをつかって無理矢理調査してみた。

  System.out.println("dump start....");
  try {
    Class clazz = target.getClass();
    System.out.println(clazz);
    for(Field f : clazz.getFields()) {
      System.out.print(f.getName() + ":");
      try {
        f.setAccessible(true);
        Object fieldval = f.get(target);
        System.out.println(fieldval.toString());
      }
      catch(Exception e) {
        System.out.println();
      }
    }
    for(Field f : clazz.getDeclaredFields()) {
      System.out.print(f.getName() + ":");
      try {
        f.setAccessible(true);
        Object fieldval = f.get(target);
        System.out.println(fieldval.toString());
      }
      catch(Exception e) {
        System.out.println();
      }
    }
  }
  catch(Exception e) {
    e.printStackTrace();
  }
  System.out.println("dump end....");

こんな感じ。
でも継承元のクラスのデータまでは取得できないっぽい。改良の余地ありですね。

0 件のコメント:

コメントを投稿