2011-11-20 53 views
2

似乎我在一個Activity中實現的toString()方法不會被調用,不管我做什麼。我總是從java.lang.Object(如Ljava.lang.Object;@4059d6a8)得到結果,而不是「我被叫了!」。我讀過一堆文章,並通過很多代碼掃描,我無法弄清楚我做錯了什麼。有人可以向我解釋我如何重寫該方法?這是我的代碼:爲什麼我的toString()方法的@Override從未在Android上調用過?

public class OverrideTestActivity extends Activity { 
    private int number = 27; 
    private String[] items = { "MyFirstItem", "MySecondItem" }; 
    public Object[] stuff = { number, items }; 

    @Override 
    public void onCreate(Bundle bundle) { 
     super.onCreate(bundle); 
     setContentView(R.layout.test); 
     OverrideTest(); 
    } 

    public void OverrideTest() { 
     TextView result = (TextView) findViewById(R.id.textView1); 
     result.setText(stuff.toString()); 
    } 

    @Override 
    public String toString() { 
     return "I was called!"; 
    } 
} 

非常感謝提前!

回答

3

在這種情況下,僅在OverrideTestActivity類型的對象上調用toString()

相反,您正在對一個沒有這種實現的數組調用toString()。

private int number = 27; 
private String[] items = { "MyFirstItem", "MySecondItem" }; 
public Object[] stuff = { number, items }; 

如果你做了這樣的事情

List<Object> stuff = Arrays.asList(27, "MyFirstItem", "MySecondItem"); 
stuff.toString(); 

你會發現,它輸出表示列表的內容的格式。格式將由List實現中的toString()方法確定。

+0

非常感謝!這正是我需要的:) – Lukas

6

要覆蓋toString()方法的類OverrideTestActivity,並呼籲toString()爲對象的數組:這就是爲什麼你所得到的Object類的默認實現。

+1

我會將jkschneider的答案標記爲已接受的答案,因爲它實際上解決了我的問題。非常感謝,但謝謝clarrification! – Lukas

相關問題