2012-08-26 116 views
1

我想弄清楚java類如何工作。自定義字符串類

當我創建一個StringBuilder

StringBuilder testString = new StringBuilder("Hello World!); 

如果我想,說,拿到testSting擁有參考價值,我可以簡單地把它想:System.out.println(testString);

這是很酷的行爲,但我不確定如何在我創建的類中複製它。

舉例來說,如果我試圖重新實現的StringBuilder我自己的版本,我想借此(爲初學者)的辦法,應該是這樣:

class MyBuilder { 
    char[] string; 


public MyBuilder(String s) { 
    string = new char[s.length()]; 
    string = s.toCharArray(); 

} 

因此,爲了使字符串我必須將數組存儲在類的數據字段中。但是,爲了在我的代碼中訪問它,我不能通過簡單地調用變量名來打印它。我將不得不使用.property語法。因此,要複製上面的例子,我必須輸入System.out.println(testString.value);,這幾乎沒有那麼漂亮。

如何製作類似於StringStringBuilder的類,並在不手動訪問數據字段的情況下返回其值?

+0

覆蓋'toString'。 'PrintStream.println'只是'toString'來確定字符串表示。 – oldrinb

回答

6

執行toString方法。

toString是一個方法Object,所以每個java對象都繼承一個。您繼承的默認實現僅用於獲取類類型以及區分一個對象和另一個對象;格式爲:ClassName @ HashCode。沒有關於您的實施的獨特細節。

在你自己的類中,爲了得到你想要的描述,你需要重寫toString方法,以便在期望String的上下文中,例如,當您撥打System.out.println(myObject.toString());時,將使用您自己的格式。

這樣做通常是一個好主意,可以更清晰地描述對象。您始終可以撥打super.toString將缺省輸出 - ClassName @ HashCode - 包含在您自己的輸出中。

1

您可以覆蓋對象MyBuilder中的Object.toString()。 System.out.println針對每個使用的對象調用此方法。例如在這裏,你可以使用:

@Override 
public String toString() { 
    return Arrays.toString(string); 
} 
0

覆蓋了toString法

private String value; 

public MyClass(String value) { 
    this.value = value; 
} 

public String toString() { 
    return value; 
}