0%

使用Java反射实现通用的toString方法

很初级的代码,记在这里方便以后复制粘贴..... 不过也有两个要注意的地方,一个是应该使用getDeclaredFields来获取所有的属性而非getFields,后者只会获取访问权限为public的属性;另一个是在访问private字段之前要field.setAccessible(true)一下否则会抛IllegalAccessException的异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
//获取所有属性
Field[] fields = this.getClass().getDeclaredFields();
sb.append("[");
for (Field field : fields) {
sb.append(field.getName() + "=");
//把字段设置为public访问属性
field.setAccessible(true);
try {
if (field.getType().isPrimitive() || field.getType() == String.class) {
sb.append(field.get(this));
} else {
sb.append(field.get(this).toString());
}
} catch (IllegalAccessException e) {
sb.append("(Exception)");
} finally {
sb.append(";");
}
}
sb.append("]");
return sb.toString();
}