我的问题是,是否可以从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,捕获所有字段并打印它们?
或者还有其他方法吗?
提前感谢您的帮助。 问候,雷霆
答案 0 :(得分:7)
您可以使用ReflectionToStringBuilder。类似的东西:
if (object.toString().endsWith("@" + Integer.toHexString(object.hashCode())) {
// default toString()...
return ReflectionToStringBuilder.toString(object);
}
else {
return object.toString();
}
答案 1 :(得分:6)
我用反射做过几次。我有一个基本上dumpObject
的泛型方法,它迭代遍历字段并将它们放到一个字符串中。这很好用,但如果你经常调用它,一定要考虑性能 - 硬编码tostring可能会更好。如,
for (Field field : obj.getClass().getDeclaredFields()) {
field.setAccessible(true);
log.info(field.getName()
+ " - " + field.getType()
+ " - " + field.get(obj));
}