Thu*_*ook 0 java logging tostring simulate
我的问题是,是否可以从JAVA中没有提供toString()方法的类中打印出特定信息?
有一个问题:我们为我们的应用程序提供了一个记录器(使用aspectJ),它打印出给定的特定参数.例如:
public void addGroupMembers(Group group, String doneBy, DataListModel<User> users) {
doSomething()
}
Run Code Online (Sandbox Code Playgroud)
我们的Logger打印出以下内容:
addGroupMembers called with given arguments:
Group = [id = ..... and so on]
username
DataListModel$1231 <-
Run Code Online (Sandbox Code Playgroud)
我们必须使用DataListModel-Class,因为我们在后台使用JSF.但是,正如您所看到的,此类不提供toString方法.
我们的记录器由我们自己编写,因此我们可以适应它.是否可以模拟一个toString方法,如下所示:如果类没有提供toString,请捕获所有字段并打印它们?
或者还有其他方法吗?
在此先感谢您的帮助.问候,雷霆
您可以使用ReflectionToStringBuilder.就像是:
if (object.toString().endsWith("@" + Integer.toHexString(object.hashCode())) {
// default toString()...
return ReflectionToStringBuilder.toString(object);
}
else {
return object.toString();
}
Run Code Online (Sandbox Code Playgroud)
我用反射做了几次.我有一个泛型方法,基本上dumpObject
是通过字段迭代并将它们放到一个字符串.这很好用,但如果你经常调用它,一定要考虑性能 - 硬编码tostring可能会更好.例如,
for (Field field : obj.getClass().getDeclaredFields()) {
field.setAccessible(true);
log.info(field.getName()
+ " - " + field.getType()
+ " - " + field.get(obj));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5613 次 |
最近记录: |