对一些java语法感到困惑

时间:2012-01-13 19:52:19

标签: java syntax

我正在从头开始学习Java(慢慢地),但是我不时地在一些“真正的”代码中达到顶峰,我发现了让我困惑的东西。

以下行和类似的行:

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

我的问题是(JPanel)container.getContentPane()之间发生了什么?它不像它们正在成倍增加吗?

我知道这是语言的一个基本部分,随着我继续学习,我会接触到这一部分,但我非常好奇,想知道它是什么。我真的不知道该怎么去谷歌才能得到答案。

4 个答案:

答案 0 :(得分:4)

  

它们不是正好倍增吗?

没有。这意味着“得到这个东西并将其视为JPanel”。它被称为类型转换,该语法用于C ++,C#和许多其他语言。

您必须确保类彼此相关的方式允许进行转换。例如,这不起作用:

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

JPanelJComponentJButton也是JButton,但JPanel不会从JSpinner.DefaultEditor下降,因此您无法在这些对象之间进行转换。您还可以将孩子从孩子转投回父母,例如从JPanel投放回JPanel,但不能从JSpinner.DefaultEditor投放到{{1}}。

答案 1 :(得分:1)

这是一个演员表达(见JLS 15.16, Cast Expressions)。

这意味着“将getContentPane()来电的结果视为JPanel”。

施法可能会失败,导致ClassCastException(请参阅JLS 5.5, Casting Conversion)。

答案 2 :(得分:1)

这称为类型转换。方法getContentPane()通常返回一个Container,但是我们希望在JPanel中获取它,这样我们就可以使用JPanel方法了。当然这两种类型必须兼容(例如,JPanel是Container的一个特定实现(通过JComponent))

答案 3 :(得分:0)

是的,这是在java中进行类型转换的方式。如您所知,java可以使用引用。在你的情况下你有一个JPanel类型引用和container.getContentPane()返回(纠正我,如果我错了我的Swing有点生锈)容器,所以既然这两个是不兼容的,你需要键入强制转换,使它们兼容。希望有所帮助