2014-05-16 75 views
0

由于某种原因,当我运行我的应用程序时,而不是获取演讲的名称,我得到一串随机显示的字符。我不知道为什么。提前致谢!toString方法返回随机字符

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(); 

而不是举杯说“测试”,我得到[email protected]。我有一种感觉,它返回的是实际的演讲对象而不是字符串。但是,我找不到为什么导致代码非常简单。

+1

看到从THR Object类继承了toString()方法的代码。 –

+0

另请注意,您正在重载toString方法。 –

+0

尝试[this](http://stackoverflow.com/questions/3615721/how-to-use-the-tostring-method-in-java) – Geros

回答

1

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

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

如果你不想改变你的方法定义出于某种原因,你的另一种选择是显式调用你的版本,但我相信你会同意这看起来有点多余。

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

当你做test.toString(),你打印*测试对象本身*,而不是一个代表对象的字符串。因为你没有覆盖Object#toString()(你重载它来代替),你的对象继承此实现:

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

而这可能不是你想要的。

你需要做的是把toString()方法你有里面Lecture类,并删除它的形式参数。那么它应该工作。

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

0

你可能要改变这样的

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



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

}