toString方法返回随机字符

时间:2014-05-16 05:01:13

标签: java android

由于某些原因,当我运行我的应用程序时,我得到一堆随机字符,而不是获得演讲的名称。我不知道为什么会这样。提前谢谢!

public Lecture(String lecturename) {
    this.lecturename = lecturename;
    listofwork = new ArrayList<Work>();
}

public String toString(Lecture lecture) {
    return lecture.lecturename;
    }

    /////////// IN ANOTHER ACTIVITY   /////////////////////

    Lecture test = new Lecture("TEST");
    Toast.makeText(getApplicationContext(), test.toString(), Toast.LENGTH_LONG).show();

而不是举杯祝词&#34; TEST&#34;,我得到了whatsmymark.Lecture@41abcf8。我有一种感觉它返回实际的讲座对象而不是字符串。但是,我无法找出导致代码如此简单的原因。

3 个答案:

答案 0 :(得分:1)

您正在编写一个toString,它将Lecture作为参数,并调用不带参数的toString()。如果您将方法定义更改为没有args,则会正确覆盖Object.toString()

public String toString() {
    return this.lecturename;
}

如果由于某种原因不想更改方法定义,则另一种选择是明确调用您的版本,但我相信您会同意这看起来有点多余。

Lecture test = new Lecture("TEST");
Toast.makeText(getApplicationContext(), test.toString(test), Toast.LENGTH_LONG).show();

答案 1 :(得分:1)

执行test.toString()时,您将打印*测试对象本身*,而不是表示对象的字符串。因为您没有覆盖Object#toString()(而是重载了它),所以您的对象继承了此实现:

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

这可能不是你想要的。

您需要做的是将toString()方法置于 Lecture类中,并删除其形式参数。然后它应该工作。

一个好主意是将@Override注释放在要覆盖的方法上。这样,如果你不小心弄乱了编译器应该发出错误/警告让你知道。

答案 2 :(得分:0)

您可能希望像这样更改您的代码

public Lecture(String lecturename) {
    this.lecturename = lecturename;
    listofwork = new ArrayList<Work>();



    public String toString() {
        return this.lecturename;
    }

}