2010-07-09 59 views
3

有沒有什麼辦法可以改變這種代碼,所以我可以刪除選中警告如何刪除SuppressWarnings(「未登記」)

ArrayList<String> keys = new ArrayList<String>(); 
// do some stuff then 
// save keys in session 
HttpServletRequest request = getThreadLocalRequest(); 
HttpSession session = request.getSession(true); 
session.setAttribute(uuid, keys); 

// get keys from session sometime later 
@SuppressWarnings("unchecked") 
ArrayList<String> keys = (ArrayList<String>) session.getAttribute(uuid); 

回答

7

你不能。 session.getAttribute()是類型不安全的。對於好的使用的

List<String> keys = SessionUtils.getAttribute(session, uuid); 
+1

+1:

您可以創建一個包裝方法,使您只有@SuppressWarnings在一個地方:

public final class SessionUtils { @SuppressWarnings("unchecked") public static <T> T getSessionAttribute(HttpSession session, String name) { return (T) session.getAttribute(name); } } 

然後你就可以使用,無需警告T參數。我想是從分配的變量中讀取的,對嗎? – pakore 2010-07-09 08:27:10

+0

是的,它是從上下文推斷的。 – Bozho 2010-07-09 08:30:53

2

好了,你必須選擇之間:警告

  • 對於原始類型
  • 的警告未檢查的轉換
  • 註釋以刪除原始類型
  • 詮釋警告移除未檢查轉換警告

的事情是,getAttribute()返回Object,所以編譯器不知道這ObjectArrayList<String>,所以它的警告,你將有問題的情況下,即Object不是ArrayList<String>

您可以取消參數ArrayList,因此它會接受任何東西的List(因此不需要轉換,因此刪除未經檢查的轉換的警告),但是接下來會針對原始類型獲取另一個警告。