[英]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.