2013-10-12 134 views
-1

我剛剛遇到了一些我以前從未見過的語法,並且因爲在Google上很難找到答案,所以我決定提出一個問題。 有問題的說法是:這個java代碼是做什麼的?

EditText editText = (EditText) findViewById(R.id.edit_message); 

我知道這些代碼是創建的EditText類的對象「EDITTEXT」,但我從來沒有見過的等號之前之後的代碼。 我最好的猜測是它運行findViewById()方法,並且該消息存在於EditText類中,這就是爲什麼在括號中的EditText是必需的?

我知道我現在應該知道這個語法,因爲我剛剛在CS大學完成了我的第一個Java課程,但不幸的是我們從來沒有被引入到這樣的事情中。

非常感謝。

+2

http://developer.android.com/reference/android/app/Activity.html是'findViewById'的第一個答案,如果你想進入android開發中,值得一讀。 – 2013-10-12 10:35:32

+0

這是一個查找已在xml文件中聲明的元素的android語法。我建議你通過developer.android.com去學習android編程,至少要熟悉這個語法。 –

+0

我認爲EditText是一個類,findViewbyId必須返回需要流傳到EditText類的東西。 – Miller

回答

2

這是一個類型轉換,強制編譯器假定函數findViewById返回的結果是一個EditText對象。

如果是另一種類型,則會出現運行時錯誤。

Here's the offical docs on the subject.

+0

非常感謝你的解釋和鏈接到文檔:) – user680881

+0

我會補充說,這僅適用於EditText是View的子類,這是findViewById返回的類型;否則編譯器會拋出一個錯誤,因爲它知道該方法返回的類型。另一種方式是「強迫編譯器假定」將「告訴編譯器對待」 – arcy

0

它是用於創建文本框,在其中您可以輸入您的查詢,在此代碼findviewbyid是一段時間(的EditText)用於鑄造和這裏返回的對象是其返回一個對象的方法輸入edittext這就是爲什麼我們保存在EDITTEXT類型的變量edittext中。

2

findViewById返回View,所以

EditText editText = findViewById(R.id.edit_message); 

將拋出一個異常編譯告訴你,你不能分配ViewEditText變量。

(EditText)撒開View類型EditText,換句話說,你告訴它的安全的findViewById結果分配給EditText編譯器,當你想到edit_message觀點實際上是一個EditText對象。

最後,如果你對編譯器說謊,edit_message不是EditText,你可以編譯並運行,但你會得到ClassCastException