網頁

2014年1月10日 星期五

Effective Java實作toString()

Object class中,也定義了toString()這個方法,因此所有的class也都繼承這個方法。預設是傳回這個物件完整類別名稱,後面接一個"@",及一個不帶正副號的十六進制hash碼。





根據Effective Java的準則,傳回的字串,應該是簡潔扼要,資訊豐富,且容易被人理解的內容,所以Mix覆寫toString(),雖然格式並沒有強制性的要求,不過原則上是field的說明與值,以便於了解內部成員的資料。

 /* (non-Javadoc)
  * @see java.lang.Object#toString()
  */
 @Override
 public String toString() {
  return "[id=" + id + ", name=" + name + ", strength="
    + strength + "]";
 }






 /**
  * To stringz.
  */
 @Test
 public void toStringz() {
  Role role = new RoleImpl();
  role.setId(1);
  role.setName("OpenYu");
  role.setStrength(100);

  String result = role.toString();
  System.out.println(result);
  assertTrue(result.indexOf("id") > 0);
  assertTrue(result.indexOf("name") > 0);
  assertTrue(result.indexOf("strength") > 0);
 }

覆寫toString()之後,Mix執行一次測試方法toStringz(),來查看其結果。





測試成功了,滿足了覆寫toString()。




console查看其結果。

[id=1, name=OpenYu, strength=100]






利用Apache Commons ToStringBuilder來覆寫。

 /*
  * (non-Javadoc)
  * 
  * @see java.lang.Object#toString()
  */
 @Override
 public String toString() {
  return new ToStringBuilder(this)
  .append("id", id)
  .append("name", name)
  .append("strength", strength)
  .toString();
 }





  1. Effective Java Item 10:總是覆寫toString()。



2 則留言:

  1. 奇妙!!! 第一次知道

    但是在Android下 用Eclipse看 會發現不是每個toString()都在Object底下



    這是Eclipse的特性 或Android重新設計過的關係???

    回覆刪除
  2. toStirng() 在Android中並非specific,它是Java object class中的method,所以Android下,不會是每個toString(),都在object底下。

    回覆刪除

Related Posts Plugin for WordPress, Blogger...