2017-03-09 8 views
0

以下のコードでは、最初の行にコンパイルエラーが表示されます(getAttributeMethodではシンボルが見つかりません)。 2行目は期待どおりに動作します。 system.out.printlnの呼び出しはコンパイラによって取得され、コンパイル後に解決される型キャストですか?これは事実ではないようですので、このシナリオで何が起こっているのかは分かりません。JavaタイプキャスティングでSystem.out.printlnコールでコンパイルエラーが発生します

System.out.println((Element) ev.getTarget().getAttribute("id")); 
Element temp = (Element) ev.getTarget(); 
System.out.println(temp.getAttribute("id")); 
+1

[Java casting order](http://stackoverflow.com/q/5762270/5221149)の可能な複製。 – Andreas

+1

オペレータの優先順位が重要です。 '.'がキャストより優先されます。 –

答えて

2

あなたはこのようにそれをキャストする必要があります。

System.out.println(((Element) ev.getTarget()).getAttribute("id")); 

あなたはコンパイラが関数「のgetAttribute」で探している(私はオブジェクトであると仮定)でgetTargetのリターン要素をキャストしていない場合クラスObjectを返しますが、それを見つけることができないため、コンパイラエラーが発生します。

+2

正解ですが、なぜこれが必要なのか説明すれば、より良い答えになります。 – VGR

+0

詳細については – DZDomi

+1

を更新コンパイラがObjectのgetAttributeメソッドを探しているのではなく、コンパイラが[EventTarget](http://docs.oracle.com/javase)のgetAttributeメソッドを探していることです/v/docs/api/org/w3c/dom/events/EventTarget.html)、これは[ev.getTarget()]の戻り型です(http://docs.oracle.com/javase/8/docs /api/org/w3c/dom/events/Event.html#getTarget--)。 – VGR