由于某些原因,当我运行我的应用程序时,我得到一堆随机字符,而不是获得演讲的名称。我不知道为什么会这样。提前谢谢!
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。我有一种感觉它返回实际的讲座对象而不是字符串。但是,我无法找出导致代码如此简单的原因。
答案 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;
}
}