問題
在維持能控制其輸出,內容和格式時才需要自定義toString()
jakarta commons commons-lang-2.4.jar提供功能
1、ReflectionToStringBuilder.reflectionToString(this); 或者其它的ReflectionToStringBuilder.toString(..).;
2、在提供ReflectionToStringBuilder的同時,Commons Lang也通過ToStringBuilder和ToStringStyle類提供了定制功能. 可以通過傳給ToStringBuilder類一個ToStringStyle對象來定制.下面的示例實現了一個即定制了樣式又定制了內容的 toString()方法:
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public String toString(){
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE).
append("lastName",lastName).
append("firstName",firstName).
toString();
}
上述toString()方法只輸出由append()參數指定的那兩個屬性.如下所示:
com.dscursive.jccook.lang.builders.PoliticalCandidate@1cd2e5f[
lastName=Jefferson
firstName=Thomas
]
使用反射生成toString()的內容有利于節省時間,但這樣做只能全部輸出該類的成員變量.如果想輸出指定的幾個變量怎么辦?
如果類里面的一些內容不便輸出呢?此外,一個對象可能有很多屬性,或者某個屬性含有大量的文本內容.在這種情況下,使用
ReflectionToStringBuilder輸出類中每個變量是不可行的.
使用ToStringBuilder時,可借助ToStringStyle類的靜態成員來定制輸出內容.ToStringBuilder的構造函數接受一個對象實例
和一個ToStringStyle樣式作為參數,返回一個ToStringBuilder類實例.該生成器接著通過append()被定制,append()方法指定
哪些屬性會被輸出.定制ToStringBuilder時,你需要手動添加各個屬性到生成器實例中.append()方法可以接受所有基本類型,
對象和數組.
如:
append(int value) 添加整數值
append(String n,int value) 添加整數值和屬性名
append(Object value) 添加對象的toString()方法
append(String n,Object value) 添加對象的toString()方法和屬性名
append(int[] array) 添加格式化后的數組內容
append(Object[] array)
append(String n,int[] array) 添加屬性名和數組大小
append(String n,Object[] array)
append(String n,int[] array,boolean detail) 添加屬性名和數組全部內容.
ToStringStyle類提供了對ToStringBuilder類輸出進行定制的機制,同時也提供幾種內建樣式.ToStringStyle.
MULTI_LINE_STYLE是這些樣式之一,其作用是在每兩個屬性之間插入換行符.另一個例子是ToStringStyle.
SIMPLE_STYLE,它的作用是簡單地輸出每個變量的值.下面每個內置樣式都提供了一個示例:
ToStringStyle.DEFAULT_STYLE
com.discursive.jccook.lang.builders.PoliticalCandidate@1cd2e5f[lastname=Jefferson,firstname=Thomas]
ToStringStyle.MULTI_LINE_STYLE
com.discursive.jccook.lang.builders.PoliticalCandidate@1cd25f[
lastName=Jefferson
firstName=Thomas
]
ToStringStyle.NO_FIELD_NAMES_STYLE
com.discursive.jccook.lang.builders.PoliticalCandidate@icd2e5f[Jefferson,Thomas]
ToStringStyle.SIMPLE_STYLE
Jefferson,Thomas
對toString()方法而言最重要的是什么?一是準確,二是要緊緊跟上不斷變化的系統內容.任何實用的錯誤信息里都帶有顯示出錯
對象內容的文本信息.出現異常時,只要打印出對象的值,往往就能很容易知道是什么地方引起異常.在缺日志系統的情況下,離開調試
器就幾乎無法調試程序,尤其是在診斷一個只影響很少人的罕見問題,而這個問題只有在特定場景下執行特定的操作才會碰到.這時,
最好能知道和錯誤相關的每個對象的內部狀態,而toString()方法是顯示這些信息的最簡便辦法.自動生成toString()方法會使你的
錯誤提示信息更有意義.
- package test2;
- import org.apache.commons.lang.builder.ToStringBuilder;
- import org.apache.commons.lang.builder.ToStringStyle;
- /**
- * 用Commons Lang組件實現自定義toString()方法
- * @author fhd001
- */
- public class ToStringTest2 {
- public static void main(String[] args) {
- Student1 stu1 = new Student1();
- stu1.setAddress("湖北");
- stu1.setName("李小龍");
- stu1.setAge(60);
- System.out.println(stu1.toString());
- }
- }
- class Student1{
- private String name;
- private int age;
- private String address;
- public void setName(String name) {
- this.name = name;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public String getName() {
- return name;
- }
- public int getAge() {
- return age;
- }
- public String getAddress() {
- return address;
- }
- @Override
- public String toString() {
- /*
- * 這里用ToStringBuilder,ToStringStyle類重寫toString()方法
- */
- return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
- .append("name",name).append("address",address).toString();
- }
- }
結果代碼
轉載于http://www.aygfsteel.com/xcp/admin/EditPosts.aspx?opt=1
名稱: ?4C.ESL | .↗Evon
口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
mail: 聯系我