2012-01-13 16 views
1

私はJavaを(ゆっくりと)基礎から学んでいますが、何度も "実際の"コードでピークに達し、私を混乱させるものが見つかりました。それのようないくつかのJava構文について混乱しています

次の行とのもの:

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

私の質問は(JPanel)container.getContentPane()の間で何が起こっているのですか?彼らは右に倍増されていないように?

は、私は、これは、言語の基本的な部分である知っていると私は学習を続けるように私はこの部分を取得しますが、私は本当に好奇心旺盛だし、それはすぐに何であったかを知りたいと思いました。私は本当に答えを得るためにgoogleに何を知らなかった。

+2

"キャスティング"を参照してください –

+2

*完全な*基本的なJavaチュートリアル/ここでは、現在あなたが求めている主題に関するオラクル独自のものがあります:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html – BalusC

+0

したがって、container.getContentPane()によって返されるものは、 JPanelオブジェクト? – red888

答えて

4

その彼らは右掛けされて好きではありませんか?

いいえ「これを取得してJPanelとして扱う」という意味です。これは型キャストと呼ばれ、その構文はC++、C#および他の多くの言語で使用されます。

クラスが互いに関連している方法でキャストが可能であることを確認する必要があります。たとえば、これは動作しないでしょう。

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

JPanelJComponentあるので、JButtonですが、あなたは、これらのオブジェクト間でキャストすることはできませんので、JPanelからJButton下降しません。また、バックJPanelに、このようなJSpinner.DefaultEditorからと、親に戻って子供からキャストではなくJPanelからJSpinner.DefaultEditorにすることができます。

+0

Neato、それは今、私には完璧な意味があります。私はまだ私のJavaの本でキャスティングには至りませんでしたが、私がプレイしたいくつかの他のlangauagesでそれを覚えています。私は構文が私にとってもっと馴染み深かったはずだと思います。 – red888

+0

実行時にキャストが有効かどうかを確認するためのチェックが行われます(キャストされているものが実際にキャストしているタイプとして扱われる場合)。そうでなければ、キャストを行う行で 'ClassCastException'を取得します。また、型の安全性を奪うので、できるだけキャスティングを避ける必要があります。 – Jesper

1

キャスト式です(JLS 15.16, Cast Expressions参照)。

「としてgetContentPane()コールの結果を処理する」という意味です。

キャストを引き起こし、失敗する可能性ClassCastExceptionJLS 5.5, Casting Conversionを参照します)。

0

はいこれは、Javaで型キャストが行われる方法です。あなたが知っているように、javaは参考文献を使って動作しますあなたのケースでは、JPanel型の参照があり、container.getContentPane()が返す(私のSwingが少し錆びている場合は正しい)コンテナを返すので、これらの2つは互換性がないので、互換性があるように型キャストする必要があります。希望が助けます

1

これはタイプキャストと呼ばれます。メソッドgetContentPane()は通常コンテナを返しますが、JPanelで取得するため、JPanelメソッドを使用できます。もちろん、2つの型は互換性がなければなりません(JPanelはContainer(JComponentを通して)の具体的な実装です)

関連する問題