簡體   English   中英

Java未經檢查的操作轉換為泛型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM