選中的Java運行我很奇怪,爲什麼下面的問題我要講一個不安全/未檢查操作警告:轉換爲普通
Map<String, ProxySession> sessionMap = (Map<String, ProxySession>) se.getSession().getServletContext().getAttribute("myattribute");
是投錯了嗎?我無法理解我在這裏錯過了什麼。
P.S.我不想擺脫警告,我想了解不安全的操作。
謝謝!
選中的Java運行我很奇怪,爲什麼下面的問題我要講一個不安全/未檢查操作警告:轉換爲普通
Map<String, ProxySession> sessionMap = (Map<String, ProxySession>) se.getSession().getServletContext().getAttribute("myattribute");
是投錯了嗎?我無法理解我在這裏錯過了什麼。
P.S.我不想擺脫警告,我想了解不安全的操作。
謝謝!
這意味着演員將檢查返回的對象是某種Map
,但由於類型擦除,它將無法檢查有關其內容的任何內容。在執行時,地圖是地圖...所以如果有人將Map<Integer, String>
放入會話中,那麼該行代碼仍然會成功。您嘗試使用其中一個條目時只會遇到錯誤,例如通過迭代條目並獲取鍵和值。
歡迎Java泛型:(
這是一個未經檢查的演員。你作爲一個程序員可能知道se.getSession()預期是準確的類型,與<String, ProxySession>
參數,讓你的古怪世界正在做演員,但它可能不是確切類型(編譯建議)既然你不編程檢查,編譯器會發出警告
JVM沒有按' t檢查這樣的模式 例如,(Map<String, ProxySession>) se.getSession().getServletContext().getAttribute("myattribute");
將等於(Map) se.getSession().getServletContext().getAttribute("myattribute");
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 –