簡體   English   中英

android的新功能,Java語法不清楚:data.setSelected((((CheckBox)view).isChecked());

[英]new to android, Java syntax is not clear: data.setSelected(((CheckBox) view).isChecked());

我正在閱讀本教程,並在最后看到了以下代碼:

data.setSelected(((CheckBox) view).isChecked());

令人困惑的部分是[[((CheckBox))view ..,我不知道所有這些括號的含義。我瀏覽了一些Java文檔,但找不到任何東西。

讓我們分解一下:

((CheckBox) view)

每當您看到(SomeClass) someObject這都是嘗試將該對象(SomeClass) someObject為該類。 在這種情況下, view的類不會擴展CheckBox,因此請嘗試強制這樣做。 如果不能這樣做,則拋出ClassCastException

從那里,我們對該對象調用isChecked()並將其作為參數傳遞給data.setSelected 我們可以這樣寫:

CheckBox myCheckbox = (CheckBox) view; //cast
// CheckBox myCheckbox = view // would likely not work
boolean checkboxIsChecked = myCheckbox.isChecked();
data.setSelected(checkboxIsChecked);

讓我們逐個討論。

首先, (CheckBox)是一個類型轉換。 這意味着無論對象旁邊的類型如何(在本例中為view ),我們都將其視為CheckBox

接下來, ((CheckBox) view) 這是包裝前面的語句的一種方法,以便編譯器將整個實體視為CheckBox 這使我們能夠從中調用屬於CheckBox ,在本例中為isChecked()

最后,最外面的括號集包裝我們之前的語句((CheckBox) view).isChecked()作為setSelected()的參數。

我不知道所有這些括號是什么意思。 我瀏覽了一些Java文檔,但找不到任何東西。

這個:

((CheckBox) view).isChecked();

這是顯式強制轉換(它假定視圖是CheckBox的實例)。 如果視圖是CheckBox的實例,它將被顯式轉換為CheckBox,並且由於此視圖將是CheckBox,因此您可以像CheckBox一樣使用它-使用特定的方法等。

如果view不是CheckBox的實例,則將引發ClassCastException。

所討論的括號用於對代碼進行邏輯分組,以便在執行表達式期間先滿足某些條件。 在您的示例中:

data.setSelected(((CheckBox) view).isChecked());

可以被重寫(非常冗長):

// Cast the view object as a CheckBox object
Checkbox myCheckbox = (CheckBox)view;

// get checked status of myCheckbox
boolean checkboxChecked = myCheckbox.isChecked();

// Set selected based on if it's checked
data.setSelected(checkboxChecked);

因此,如果再次查看原始示例(帶有額外的空格) ( (CheckBox) view ) .isChecked()您會看到內部是CheckBox的強制轉換view ,並用括號括起來,這導致在執行之前isChecked()方法調用,確保將在CheckBox類型的變量上調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM