iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
Software Development

深入淺出Java 30天系列 第 15

Day 15: 總是覆寫toString

  • 分享至 

  • xImage
  •  

在實作類別的時候,最好覆寫toString ,如果不覆寫toString ,把物件印出來的時候,會是class name + @ + hash code的十六進位,這串字串對開發人員來說是沒有意義的,以下面的範例來說,Person這個類別執行時,印出來會是PersonForToString@2a139a55 ,這對使用者並沒有幫助。

class PersonForToString {
    private String name;
    private int age;

    public PersonForToString(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {
        PersonForToString person = new PersonForToString("Lucky", 10);
        System.out.println("Person: " + person); //PersonForToString@2a139a55
    }
}

但如果有覆寫,在執行System.out.printlnSystem.out.print印出Person時,會自動呼叫toString,這時候就會印出在toString實作的內容。另外,特別提醒,覆寫toString時最好加上註解,如果這個類別是很多人在使用,加上註解可以幫助大家更好理解內容,這樣從toString取得字串,並且要parse的時候比較容易理解格式。

class PersonForToString {
    private String name;
    private int age;

    public PersonForToString(String name, int age) {
        this.name = name;
        this.age = age;
    }

   /**
    * Overridden toString() method to provide a string representation of the object.
    * 
    * @return A string representation of the PersonForToString object.
    *         Format: Person{name='name', age=age}
    *         Example: Person{name='Lucky', age=10}
    *         The string includes the class name 'Person' followed by curly braces
    *         enclosing the name and age properties of the person, with the name 
    *         in single quotes and the properties separated by a comma.
    */
   @Override public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public static void main(String[] args) {
        PersonForToString person = new PersonForToString("Lucky", 10);
        System.out.println("Person: " + person);
    }
}

上一篇
Day 14: 明智地覆寫clone(下)
下一篇
Day 16: 考慮實作Comparable
系列文
深入淺出Java 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言