[改善Java代碼]推薦覆寫toString方法


建議49: 推薦覆寫toString方法

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

 1 public class Client {
 2     public static void main(String[] args) {
 3         System.out.println(new Person("張三"));
 4     }
 5 }
 6 
 7 class Person {
 8     private String name;
 9 
10     public Person(String _name) {
11         name = _name;
12     }
13 
14     public String getName() {
15         return name;
16     }
17 
18     public void setName(String name) {
19         this.name = name;
20     }
21 }

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

    public String toString(){  
         return String.format("%s.name=%s",this.getClass(),name);  
    } 

打印輸出:

class cn.summerchill.test.Person.name=張三

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM