2017-03-09 34 views
0

在下面的代碼中,第一行給出了一個編譯錯誤(找不到getAttributeMethod的符號)。第二條線按預期工作。 system.out.println調用是否被編譯器拾取並且在編譯後解析類型轉換?這似乎並不是這種情況,所以我不太瞭解這種情況下發生了什麼。Java類型Casting在System.out.println調用中給出編譯錯誤

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

[Java cast order](http://stackoverflow.com/q/5762270/5221149)可能有重複。 – Andreas

+1

運營商優先事項。 '.'優先於cast。 –

回答

2

你要投它是這樣的:

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

如果你不投了getTarget返回元素(我假設是Object)編譯器正在查找功能「的getAttribute」 Object類,但無法找到它,因此給出編譯器錯誤。

+2

正確的答案,但爲什麼需要這個解釋會使它成爲更好的答案。 – VGR

+0

更新了它以獲取更多解釋 – DZDomi

+1

關閉,但並不是編譯器正在尋找Object中的getAttribute方法,而是編譯器正在[EventTarget]中尋找getAttribute方法(http://docs.oracle.com/javase /8/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