2011-10-18 119 views
4

選中的Java運行我很奇怪,爲什麼下面的問題我要講一個不安全/未檢查操作警告:轉換爲普通

Map<String, ProxySession> sessionMap = (Map<String, ProxySession>) se.getSession().getServletContext().getAttribute("myattribute"); 

是投錯了嗎?我無法理解我在這裏錯過了什麼。

P.S.我不想擺脫警告,我想了解不安全的操作。

謝謝!

+0

http://stackoverflow.com/questions/262367/type-safety-unchecked-cast http://stackoverflow.com/questions/509076/how-do-i-address-unchecked- cast-warnings http://stackoverflow.com/questions/2592642/type-safety-unchecked-cast-from-object –

回答

6

這意味着演員將檢查返回的對象是某種Map,但由於類型擦除,它將無法檢查有關其內容的任何內容。在執行時,地圖是地圖...所以如果有人將Map<Integer, String>放入會話中,那麼該行代碼仍然會成功。您嘗試使用其中一個條目時只會遇到錯誤,例如通過迭代條目並獲取鍵和值。

歡迎Java泛型:(

1

這是一個未經檢查的演員。你作爲一個程序員可能知道se.getSession()預期是準確的類型,與<String, ProxySession>參數,讓你的古怪世界正在做演員,但它可能不是確切類型(編譯建議)既然你不編程檢查,編譯器會發出警告

也請參閱:How do I address unchecked cast warnings?

0

JVM沒有按' t檢查這樣的模式 例如,(Map<String, ProxySession>) se.getSession().getServletContext().getAttribute("myattribute");將等於(Map) se.getSession().getServletContext().getAttribute("myattribute");