为什么我的@Override toString()方法从未在Android上调用过?

时间:2011-11-20 10:44:07

标签: android android-activity override tostring

似乎无论我做什么,我都不会在Activity中实现toString()方法。我总是得到java.lang.Object的结果(比如Ljava.lang.Object;@4059d6a8),而不是“我被叫了!”。我已经阅读了大量文章并浏览了大量代码,我无法弄清楚我做错了什么。有人可以向我解释如何覆盖该方法?这是我的代码:

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!";
    }
}

提前多多感谢!

2 个答案:

答案 0 :(得分:6)

您正在覆盖类toString()的{​​{1}}方法并为对象数组调用OverrideTestActivity:这就是您获得toString()类的默认实现的原因

答案 1 :(得分:3)

在这种情况下,只在toString()类型的对象上调用OverrideTestActivity

相反,你在一个数组上调用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的内容。格式将由List实现上的toString()方法确定。