[英]Java unchecked operation cast to generic
我想知道為什么以下發出關於不安全/未檢查操作的警告:
Map<String, ProxySession> sessionMap = (Map<String, ProxySession>) se.getSession().getServletContext().getAttribute("myattribute");
演員錯了嗎? 我無法理解我在這里缺少的東西。
PS我不想擺脫警告,我想了解不安全的操作。
謝謝!
這意味着演員將檢查返回的對象是某種類型的Map
,但是由於類型擦除 ,它將無法檢查其內容的任何內容。 在執行時,map是map是map ...所以如果有人將Map<Integer, String>
改為你的會話,那么這行代碼仍然會成功。 當您嘗試使用其中一個條目時,例如通過迭代條目並獲取鍵和值,您只會收到錯誤。
歡迎來到古怪的Java泛型世界:(
這是一個未經檢查的演員。 作為程序員,您可能知道se.getSession()應該是具有<String, ProxySession>
參數的精確類型,因此您正在進行轉換,但它可能不是那種確切的類型(編譯器建議)。 由於您沒有以編程方式檢查它,編譯器會向您發出警告。
另請參閱: 如何處理未選中的強制警告?
JVM不會像這樣檢查強制轉換。 例如, (Map<String, ProxySession>) se.getSession().getServletContext().getAttribute("myattribute");
將等於(Map) se.getSession().getServletContext().getAttribute("myattribute");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.