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 <-

我们必须使用 DataListModel-Class,因为我们在后台使用 JSF。但是,如您所见,此类不提供 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 回答