我喜歡java中的泛型特性並經常使用它。但是我有一個問題,如果我使用那些還沒有意識到泛型的庫。一個例子是servlet。如果使用ServletRequest.getParameterMap()
,結果將是原始映射,但它僅包含String
作爲鍵,而String[]
作爲值。所以我想把它分配給Map<String, String[]>
。但是對於這項任務,我得到了一個警告。我怎樣才能避免這種警告與語言,而不是簡單地用@SuppressWarnings
註釋壓制警告。如何在Java中使用遺留庫來避免未經檢查的轉換警告?
回答
正如其他人所說的警告是無法避免的,除非通過壓制它們。恕我直言,問題在於要麼使用適用於小範圍的註釋來拋棄代碼,要麼在全局忽略它們並冒着錯誤的風險。
IIRC有一個建議,在原始類型被返回而不是在呼叫時產生警告。
同時,我認爲最好的辦法是使用包裝方法,這樣的警告被限制在一個地方,它是安全的忽視,他們說:
class NoWarn {
public static Map<String, String[]> getParameterMap(ServletRequest r)
{
@SuppressWarnings("unchecked")
Map<String, String[]> result = r.getParameterMap();
return result;
}
}
注意 這個答案是用註釋編輯,註釋不能在方法體內。這是不正確的,上面的語法正確。我已經回覆了這個變化。
我不認爲你可以。警告將出現,除非您禁止它,或者從IDE的警告列表中進行過濾。
我怎樣才能避免與 語言此警告,而不是簡單地抑制 與 SuppressWarnings的註釋警告。
註釋是避免與語言警告的方式。沒有其他辦法。
您可以做的最乾淨的事情是封裝從遺留代碼到泛型代碼的轉換,並僅在那裏禁止警告。
E.g.你可以在你的遺留庫上放置一個通用的外觀,儘管這可能並不總是值得的。
+1在舊API上編寫一個樣板化的封裝包裝,並在其上打擊警告。 – skaffman 2009-07-15 10:35:28
我有同樣的問題,我只是關閉所有通用警告,我很高興:)你也可以關閉serialVersionUID警告,因爲很多人不使用serialVersionUID。在Eclipse - Window/Perferences/Java/Compiler/Errors/Warnings中使用
並關閉所有通用類型。
P.S.許多錯誤的警告讓你忽略所有的警告,有些警告可能是有用的。
我使用警告作爲改進的可能性。我沒有收到很多警告,因爲我在路上解決了所有問題。通常,未經檢查的轉換警告對找到可以改進的代碼部分非常有幫助。但在這種情況下,我不認爲沒有壓制這個警告。 – Mnementh 2009-07-15 12:03:39
正如其他人所說,擺脫這種警告的唯一方法就是壓制它。
最好的做法是使用方法和類來封裝警告。
但與其他警告,總是試圖解決正在使他們的問題,如刪除未使用的進口等...它使您的應用程序更加精簡和更好。
編碼快樂
偶然發現了這個問題,因爲我也試圖找出一種方法來避免使用禁止標註在這種情況下。我發現另一個我認爲值得一提的選擇:
Map<?, ?> map = servletRequest.getParameterMap();
String[] values = (String[]) map.get("key");
我們基本上使用通配符'?'以表明地圖可以具有任何類型的鍵和值。
我在這裏看到的潛在缺點是我們在獲取值時進行顯式強制轉換,我認爲這會在運行時導致輕微的性能開銷。
- 1. 使用Mockito時避免未經檢查的警告
- 2. 未經檢查的轉換警告
- 3. 避免關於類的未經檢查的轉換異常的警告?
- 4. 避免未經檢查的警告在以下
- 5. 避免未經檢查的警告電話
- 6. 如何解決Java中未經檢查的調用警告?
- 7. 未經檢查的投射警告 - 如何避免這種情況?
- 8. 在Java中修復「發現未檢查的轉換」警告?
- 9. 警告,以避免時間在未來的Java
- 10. 意外的未經檢查的轉換警告
- 11. 重新設計未經檢查的強制轉換警告
- 12. 如何在不使用泛型的情況下使用遺留代碼時避免使用Eclipse警告?
- 13. 檢查simplexml_load_file文件以避免警告
- 14. 避免Java泛型警告?
- 15. 奇怪未檢查轉換警告
- 16. 如何避免VS中的unique_ptr檢查性能警告?
- 17. 在Java中消除未經檢查的警告
- 18. 如何避免__builtin___memset_chk警告?
- 19. Java泛型擴展仍然會生成未經檢查的轉換警告
- 20. 如何在ProGuard GUI中避免警告
- 21. 未經檢查在Java中拋出警告?
- 22. scoped_lock如何避免發出「未使用的變量」警告?
- 23. Java泛型,如何在使用類層次結構時避免未檢查的賦值警告?
- 24. 未經檢查的操作警告
- 25. 未經檢查的投射警告
- 26. 如何避免Perl中的警告?
- 27. 抑制JSP文件中未經檢查的Java警告
- 28. NetBeans 7.1中沒有未經檢查的警告Java EE
- 29. 在Java中避免使用泛型的警告
- 30. C++避免使用typedef進行類型轉換警告
我希望您提到的提議能夠快速實施(Java7?),因爲那樣可以清楚地解決我的問題。 – Mnementh 2009-07-20 10:41:43