java 中toString()方法詳解


1.toString()方法
Object類具有一個toString()方法,你創建的每個類都會繼承該方法。它返回對象的一個String表示,並且對於調試非常有幫助。然而對於默認的toString()方法往往不能滿足需求,需要覆蓋這個方法。
toString()方法將對象轉換為字符串。看以下代碼:
package sample;
 
class Villain {
    private String name;
 
    protected void set(String nm) {
       name = nm;
    }
 
    public Villain(String name) {
       this.name = name;
    }
 
    public String toString() {
       return "I'm a Villain and my name is " + name;
    }
}
 
public class Orc extends Villain {
    private int orcNumber;
 
    public Orc(String name, int orcNumber) {
       super(name);
       this.orcNumber = orcNumber;
    }
 
    public void change(String name, int orcNumber) {
       set(name);
       this.orcNumber = orcNumber;
    }
 
    public String toString() {
       return "Orc" + orcNumber + ":" + super.toString();
    }
 
    public static void main(String[] args) {
       Orc orc = new Orc("Limburger", 12);
       System.out.println(orc);
       orc.change("Bob", 19);
       System.out.println(orc);
    }
}
 
結果:
sample.Orc@11b86e7
sample.Orc@11b86e7
如果去掉注釋,即加入2個toString()方法后,得到
結果:
Orc12:I'm a Villain and my name is Limburger
Orc19:I'm a Villain and my name is Bob
 
2.在容器類中使用toString()
編寫一個工具類,用於在控制台輸出Iterator。
import java.util.Iterator;
 
public class Printer {
    static void printAll(Iterator e){
       while(e.hasNext()){
           System.out.println(e.next());
       }
    }
}
在Hamster類中重寫父類的toString()方法。
public class Hamster {
    private int hamsterNumber;
    public Hamster(int hamsterNumber){
       this.hamsterNumber=hamsterNumber;
    }
 
    public String toString(){
       return "This is Hamster #"+hamsterNumber;
    }
}
在HamsterMaze類中使用容器類加載Hamster類對象並輸出結果。
import java.util.ArrayList;
import java.util.List;
 
public class HamsterMaze {
    @SuppressWarnings("unchecked")
    public static void main(String[] args){
       List list=new ArrayList();
       for(int i=0;i<3;i++)
           list.add(new Hamster(i));
       Printer.printAll(list.iterator());
    }
}
結果:
This is Hamster #0
This is Hamster #1
This is Hamster #2
 
3.一個實現toString()的通用的Bean
在作一個項目時發現,許多bean需要實現toString()方法,就實現一個通用的bean,然后通過其他繼承即可。
import java.lang.reflect.Field;
 
public class BaseBean {
  
    public String toString() {
       StringBuffer sb = new StringBuffer();
       try {
           Class t = this.getClass();
           Field[] fields = t.getDeclaredFields();
           for (int i = 0; i < fields.length; i++) {
              Field field = fields[i];
              field.setAccessible(true);
              sb.append("{");
              sb.append(field.getName());
              sb.append(":");
              if (field.getType() == Integer.class) {
                  sb.append(field.getInt(this));
              } else if (field.getType() == Long.class) {
                  sb.append(field.getLong(this));
              } else if (field.getType() == Boolean.class) {
                  sb.append(field.getBoolean(this));
              } else if (field.getType() == char.class) {
                  sb.append(field.getChar(this));
              } else if (field.getType() == Double.class) {
                  sb.append(field.getDouble(this));
              } else if (field.getType() == Float.class) {
                  sb.append(field.getFloat(this));
              } else
                  sb.append(field.get(this));
              sb.append("}");
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
       return sb.toString();
    }
}
 
測試類
public class TestBean extends BaseBean {
 
    private int id;
 
    public int getId() {
       return id;
    }
 
    public void setId(int id) {
       this.id = id;
    }
 
    public static void main(String[] args) {
       TestBean testBean = new TestBean();
       testBean.setId(9);
       System.out.println(testBean.toString());
    }
}
結果
{id:9}


免責聲明!

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



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