2012-10-04 17 views
0

豈是:是Android的類型參數也是一個對象

final Button okButton = (Button)findViewById(R.id.okButton); 

這是非常明確的,它是一個變量聲明+賦值,絕對不是一個對象! 如果是這樣,我該怎麼做以下,並實際在其操作方法:

okButton.setOnClickListener(this); 
okButton.setOnLongClickListener(this); 

它使混亂......

謝謝...

+0

什麼是參數? – Rajesh

+0

我的意思是一個變量......(固定的) – Adam

回答

1

A variable can be an Object

如果你看看documentation for findViewById它需要一個int類型的參數,並返回一個視圖。

你前綴findViewById(Button)告訴你期望的是通過R.id.okButton到findViewById將返回查看這實際上是Button (a sub-class of View)實例的系統。

該指令(Button)casts查看返回findViewById的類型按鈕並將其分配給您的變量okButton

所以

  • R.id.okButton是被作爲參數傳遞到
  • findViewById一個int,它是(可能是一個活動我想的)的方法,
  • 返回的對象類型查看可強制轉換爲對象類型的按鈕
  • 分配給您的按鈕變量
+0

所以你說在Java中,參數實際上是一個具有一個屬性的對象?而對象和參數之間的不同僅僅是對象的屬性數量和關鍵字'new'? – Adam

+0

編號參數是傳遞給方法的一條信息。它可以是像int或Object這樣的原始類型。 Object和參數的區別在於一個是Object,可以包含方法,另一個是參數(它們之間有很多不同)。你真的想讀基本的Java文檔和一些基本的面向對象的例子來獲得這些基本術語的含義直接 –

+0

我知道所有這些,但似乎有什麼不同: 私人按鈕okButton =(按鈕)findViewById (R.id.okButton);對此:Button okButton = new Button(); okButton =(Button)findViewById(R.id.okButton)??? thx – Adam

1

無關與Android。您似乎對Java語法感到困惑。 「final Button okButton」是類型爲「Button」的對象「okButton」的聲明。對象引用已被聲明爲「final」,因此不能再次分配。

+0

......實際上它可以帶有一些非常基本的反射代碼。 –

+0

我知道,但一個新的對象需要用關鍵字'new'來聲明,否則它是一個變量,不是嗎?如果沒有,你們怎麼能在它們之間有所不同(var vs obj)? – Adam

+0

所以okButton是一個Button類型的變量。因此你可以調用Button類的方法。這是否回答你的問題? – Sameer

0

Button okButton意味着你已經創建了一個按鈕對象名稱okButton然後你通過你在xml中創建的按鈕類型對象實例化它,並給出了一個唯一的標識名okButton。

另一種方式是

Button okButton = new Button(this); 

其實沒有區別它們之間接受第二你動態創建它,可以添加/刪除他們不接觸XML。

+0

所以似乎有什麼不同:Button okButton = new Button(); ?? – Adam

+0

在你的評論中你明確地創建了一個按鈕並將其分配給一個變量。在findViewById的情況下,您需要使用方法來獲取按鈕。你不需要知道或關心它是否產生了一個新的Button或獲得了一個已經存在的引用。 –

相關問題