0

私の質問は、JAVA で toString() メソッドを提供しないクラスから特定の情報を出力することは可能ですか?

問題があります: 私たちはアプリケーション用に (aspectJ を使用して) ロガーを提供しています。これは、与えられた特定の引数を出力します。例えば:

public void addGroupMembers(Group group, String doneBy, DataListModel<User> users) {
    doSomething()
}

Logger は次のように出力します。

addGroupMembers called with given arguments:
Group = [id = ..... and so on]
username
DataListModel$1231 <-

バックグラウンドで JSF を使用しているため、DataListModel-Class を使用する必要があります。しかし、ご覧のとおり、このクラスは toString メソッドを提供していません。

私たちのロガーは私たち自身によって書かれているので、それを適応させることができます. 次のような toString メソッドをシミュレートすることは可能ですか: クラスが toString を提供しない場合、すべてのフィールドをキャッチして出力しますか?

それとも他に方法はありますか?

よろしくお願いします。こんにちは、サンダーフック

4

2 に答える 2

7

ReflectionToStringBuilderを利用できます。何かのようなもの:

if (object.toString().endsWith("@" + Integer.toHexString(object.hashCode())) {
  // default toString()...
  return ReflectionToStringBuilder.toString(object);
}
else {
  return object.toString();
}
于 2011-08-05T17:02:51.377 に答える
6

リフレクションを使用してこれを数回行いました。dumpObject本質的にフィールドを反復処理して文字列に入れる汎用メソッドがありました。これはうまく機能しますが、これを頻繁に呼び出す場合は必ずパフォーマンスを考慮してください。tostring をハードコーディングした方がよい場合があります。例えば、

    for (Field field : obj.getClass().getDeclaredFields()) {
        field.setAccessible(true); 
        log.info(field.getName()
                 + " - " + field.getType()
                 + " - " + field.get(obj));
    }
于 2011-08-05T17:02:57.620 に答える