讀古今文學網 > 編寫高質量代碼:改善Java程序的151個建議 > 建議49:推薦覆寫toString方法 >

建議49:推薦覆寫toString方法

為什麼要覆寫toString方法,這個問題很簡單,因為Java提供的默認toString方法不友好,打印出來看不懂,不覆寫不行,看這樣一段代碼:


public class Client{

public static void main(Stringargs){

System.out.println(new Person("張三"));

}

}

class Person{

private String name;

public Person(String_name){

name=_name;

}

/*name的getter/setter方法省略*/

}


輸出的結果是:Person@1fc4bec。如果機器不同,@後面的內容也會不同,但格式都是相同的:類名+@+hashCode,這玩意就是給機器看的,人哪能看得懂呀!這就是因為我們沒有覆寫Object類的toString方法的緣故,修改一下,代碼如下所示:


public String toString(){

return String.format("%s.name=%s",this.getClass(),name);

}


如此就可以在需要的時候輸出可調試信息了,而且也非常友好,特別是在Bean流行的項目中(一般的Web項目就是這樣),有了這樣的輸出才能更好的debug,否則查找錯誤就如海底撈針呀!當然,當Bean的屬性較多時,自己實現就不可取了,不過可以使用apache的commons工具包中的ToStringBuilder類,簡潔、實用又方便。

可能有讀者要說了,為什麼通過println方法打印一個對像會調用toString方法?那是源於println的實現機制:如果是一個原始類型就直接打印,如果是一個類類型,則打印出其toString方法的返回值,如此而已!