Java対応の各クラスの属性と対応する値を印刷
2419 ワード
ログを印刷する過程で、親クラスのtoStringメソッドを複写する必要があることがよくあります.属性名と属性値を1つずつスペルすると、コードは非常に冗長になり、重複性が大きくなります.反射に従って迅速に取得できます.
例えば私たちのbeanクラスでは、コアはtoStringメソッドにあります.
テストコード:
実行結果:
例えば私たちのbeanクラスでは、コアはtoStringメソッドにあります.
public class Bean {
private String name = "abc";
private String age = "15";
private boolean success = true;
private Long money = 5000L;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public Long getMoney() {
return money;
}
public void setMoney(Long money) {
this.money = money;
}
@Override
public String toString(){
//
StringBuffer result = new StringBuffer();
try {
// Class
Class extends Bean> clazz = this.getClass();
//
Field [] fields = clazz.getDeclaredFields();
for (Field field : fields) {
//
String fieldName = field.getName();
//
if ("serialVersionUID".equals(fieldName)) {
continue;
}
// , boolean
Class> type = field.getType();
// boolean is, get
String methodName = (type.getTypeName().equals("boolean")?"is":"get")
+ fieldName.substring(0,1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
Method method;
java.lang.Object resultObj;
//
method = clazz.getMethod(methodName);
//
resultObj = method.invoke(this);
//
if (resultObj != null && !"".equals(resultObj)) {
result.append("[").
append(fieldName).append("]").append(resultObj).append(" ");
}
}
} catch (SecurityException | NoSuchMethodException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
return result.toString();
}
}
テストコード:
public static void main(String[] args) {
Bean bean = new Bean();
System.out.println(bean.toString());
}
実行結果:
[name]abc [age]15 [success]true [money]5000