Apache Commons Lang為解決動態的toString()方法提供一套強有力的API.
一、實現策略
1、ReflectionToStringBuilder.toString(),通過反射方式實現.
2、new ToStringBuilder(),通過自定義顯示格式方式實現,顯示的式樣提供了好幾種.
二、實例
為了測試,創佳兩個類 Foo、Bar,分別通過兩種方式實現其toString方法
public class Foo { private String name; private int age; private Bar bar; public Foo(String name, int age) { this.name = name; this.age = age; } //省略getter/setter方法 } |
public class Bar { private String name; public Bar(String name) { this.name = name; } //省略getter/setter方法 } |
1、通過反射方式實現toString();
@Override public String toString() { return ReflectionToStringBuilder.toString(this); } |
顯示效果:
lang.Foo@c2a132[name=foo,age=88,bar=lang.Bar@e102dc[name=bar]] Process finished with exit code 0 |
2、通過自定義格式方式實現
@Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) .append("name", name) .append("age", age) .append("bar", bar) .toString(); } |
上面這個是僅僅給了Foo類的toString()寫法.
ToStringBuilder類有好幾個靜態常量,用來控制顯示格式.
下面給出一個運行結果:
lang.Foo@1aaa14a[ name=foo age=88 bar=lang.Bar@1e51060[name=bar] ] Process finished with exit code 0 |
從中看來,toString()通過反射方式實現可以真正實現動態的.寫法簡單也省事,推薦!
[火星人 ] Apache Commons Lang之toString()實現已經有478次圍觀