2010-07-09 5 views
3

Est-il possible que je peux changer ce code afin que je puisse supprimer l'avertissement décochéecomment supprimer SuppressWarnings (« sans contrôle »)

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); 

Répondre

7

Vous ne pouvez pas. session.getAttribute() est de type dangereux.

Vous pouvez créer une méthode d'emballage, de sorte que vous avez seulement le @SuppressWarnings en un seul endroit:

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

vous pouvez utiliser, sans avertissement:

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

+1 pour une utilisation agréable de la Paramètre T Je suppose que est lu à partir de la variable affectée, non? – pakore

+0

oui, il est déduit du contexte. – Bozho

2

Eh bien, vous devez choisir entre:

  • Avertissement pour le type brut
  • Avertissement pour la conversion sans contrôle
  • Annotation pour enlever avertissement pour le type brut
  • Annotation à supprimer avertissement pour la conversion sans contrôle

La chose est que getAttribute() retourne un Object, de sorte que le compilateur ne sait pas que ce Object est un ArrayList<String>, il vous avertit qu'il y aura des problèmes dans le cas où Object est pas un ArrayList<String> .

Vous pouvez de-ArrayList il Paramétrer donc accepter un List de quoi que ce soit (si la conversion n'est pas nécessaire, éliminant ainsi l'avertissement pour la conversion non contrôlée), mais vous obtenez alors un autre avertissement pour le type brut.

Questions connexes