2012-01-13 160 views
1

我正在從頭開始學習Java(慢),但是我一次又一次地在某些「真實」代碼處達到峯值,並且發現讓我困惑的東西。關於一些java語法的困惑

以下行的人喜歡它:

JPanel panel = (JPanel) container.getContentPane(); 

我的問題是什麼是(JPanel)container.getContentPane()之間發生了什麼?它不像他們正在倍增的權利?

我知道這是語言的基本部分,並且隨着我繼續學習,我會到達這一部分,但我非常好奇,想知道它是什麼。我真的不知道該如何谷歌才能得到答案。

+2

查找「鑄造」 – 2012-01-13 19:52:53

+2

我建議您只需通過* entire *基本Java教程/書本工作即可。以下是Oracle針對您當前所詢問主題的一個:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html – BalusC 2012-01-13 19:56:10

+0

因此,container.getContentPane()返回的結果是作爲JPanel對象? – red888 2012-01-13 19:57:55

回答

4

它不像他們正在倍增權嗎?

不。意思是「把這個東西當作JPanel。」它被稱爲類型轉換,並且在C++,C#和許多其他語言中使用該語法。

您必須確保這些類彼此相關的方式才能投射。例如,這是行不通的:

JPanel p = new JPanel(); 
JComponent c = (JComponent)p; 
JButton b = (JButton)c; 

JPanelJComponent,所以是JButton,但JButton不會JPanel因此,你可以不投這些對象之間的下降。您還可以從小孩回到父母,例如從JSpinner.DefaultEditor回到JPanel,但不從JPanelJSpinner.DefaultEditor

+0

Neato,現在對我來說非常有意義。我沒有在我的Java書中寫出,但我記得我曾經玩過的其他一些語言。我猜這個語法應該對我更熟悉。 – red888 2012-01-13 20:03:14

+0

請注意,檢查是在運行時完成的,以檢查轉換是否有效(即,如果轉換的東西確實可以視爲您要轉換的類型)。如果不是,則會在您執行強制轉換的行上得到一個'ClassCastException'。此外,應儘可能避免鑄造,因爲它會帶走類型安全。 – Jesper 2012-01-13 22:15:05

0

是的這是如何在java中進行類型轉換。正如你所知道的java與引用。在你的情況下,你有一個JPanel類型的引用和container.getContentPane()返回(糾正我,如果我錯了,我的Swing有點生疏)容器,所以既然這兩個不兼容,你需要輸入cast使它們兼容。希望有幫助

1

這被稱爲類型轉換。方法getContentPane()通常會返回一個Container,但我們希望將它置於JPanel中,以便我們能夠使用JPanel方法。當然這兩種類型必須兼容(例如JPanel是Container的特定實現(例如通過JComponent))