2014-05-16 72 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; 
    } 

}