2013-03-19 53 views
4

當我將某些類的實例(例如ArrayList)打印到流中時,例如, System.out.println( ArrayList)的實例,它不打印引用id(例如ArrayList @ 2144c53d),但是具有某些格式(例如[1,2,3,4])的實際值。我想知道如何爲我自己的課程做到這一點?我是否可能需要定義一些方法/實現一些接口?將類打印

+1

覆蓋toString()方法 – 2013-03-19 17:27:49

回答

4

當您嘗試使用System.out.print打印類的對象ArrayList中,它會在該類toString()方法。如果它沒有在給定的類中找到,那麼它會嘗試在其超類中查找該方法,直到它找到一個。然後打印toString()返回的String類中定義的方法。如果一個類不延長任何那麼它在默認情況下調用toString方法Object,它返回字符串是這樣的:

public String toString() 
{ 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
} 

這就是爲什麼你要打印你自己的類對象時,得到這樣的類型的輸出。要打印不同的字符,你應該在你自己的類中覆蓋toString()方法。例如:

public class MyClass 
{ 
    private int roll; 
    private String name; 
    MyClass(int roll,String name) 
    { 
    this.roll = roll; 
    this.name = name; 
    } 
    @Override 
    public String toString() 
    { 
    return "roll="+roll+",name="+name; 
    } 
} 
+0

+1。我喜歡這個答案,因爲它解釋了爲什麼他會得到他所得到的,而不僅僅是給他解決方案。 – 2013-03-19 17:49:28

10

簡單:您覆蓋Object.toString()方法。例如:

public class Person { 
    private final String name; 
    private final LocalDate birthDate; 

    public Person(String name, LocalDate birthDate) { 
     this.name = name; 
     this.birthDate = birthDate; 
    } 

    @Override public String toString() { 
     return String.format("%s (born %s)", name, birthDate); 
    } 
} 

對於更復雜的處理,你可能要考慮實施Formattable接口 - 雖然我從來沒有親自這樣做我自己。

+0

你是第一個回覆:)謝謝。 – user1377000 2013-03-19 17:28:49

+2

@ user1377000他總是第一快。 – Pragnani 2013-03-19 17:33:37

2

。我想知道如何爲我自己的課程做到這一點?

通過重寫toString()您班上的方法。

public class MyClass { 
@override 
public String toString(){ 
return "I am a legend MwhAhAH"; 
} 
} 

如果你沒有在你的類中重寫toStirng(),Object#toString()將被調用,它返回yourclassname+ "@"+ hexnumberOfHashcode

public String toString() { 
    237   return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
    238  } 

ArrayList中確實覆蓋toString方法:

public String toString() { 
431  Iterator<E> i = iterator(); 
432  if (! i.hasNext()) 
433   return "[]"; 
434 
435  StringBuilder sb = new StringBuilder(); 
436  sb.append('['); 
437  for (;;) { 
438   E e = i.next(); 
439   sb.append(e == this ? "(this Collection)" : e); 
440   if (! i.hasNext()) 
441    return sb.append(']').toString(); 
442   sb.append(", "); 
443  } 
444 } 
445 
446} 
1

覆蓋

toString()方法。

此方法是基本給出輸出的對象類。

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

要獲得其他任何你需要在你的課上覆蓋這個。

例如:當您打印的ArrayList這一翻譯的ArrayList其給出的ArrayList元素@ 2144c53d

public String toString() { 
    return "Stackoverflow"; 
} 
0

很簡單,您應該只需要重寫toString()方法。

類似以下內容將需要做:

public class MyClass { 
    @override 
    public String toString(){ 
     return "My custom string, perhaps using some of the class propertis"; 
    } 
}