IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

caster une List<Object> en List<..>


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut caster une List<Object> en List<..>
    J'ai un petit problème de casting :

    Une methode de la persistance hibernate (criteria.list()) renvoi une liste d'object.

    Or moi je récupère des User, mais je ne sait pas a quel moment caster ces object en User ?

    En effet, je désire utiliser la boucle foreach du jdk 1.5 ainsi que les type generiques. Impossible de placer le cast quelque part sans avoir un warning

    Donc nous avons la methode recuperant cette liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public List getUserList() {
    		Criteria criteria = session.createCriteria(User.class);
    		List results = criteria.list();//Tester le cast ici avec les type generic dans le return etc ... warning
    		return results;
    	}
    Et la methode qui exploite cette liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
     
    		java.util.List <User>users = new Vector<User>() ;
    		try {
    			accessManager.startSession();
    			accessManager.startTransaction();
    			users = (java.util.List<User>) accessManager.getUserList(); //warning
    			for(User us : users) //Warning si cast ici egalement
    				us.setQuotaCour(0);
    			accessManager.commit();
    		}
    		catch (IllegalArgumentException e) {
    			e.printStackTrace(); //Avertir du pb le fichier ne peut être supprimé
    		} 
     
    		catch (Exception e) {
    			e.printStackTrace();
    		}
    		finally {
    			accessManager.closeSession(); //Quoi qu'il arrive, on clos la session
    		}	
    	}
    Le warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type safety : the cast from List to List<User> is actually checking against the erased type List
    Ais-je loupé quelque chose ?

  2. #2
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Bonjour

    A priori la seule solution est d'utiliser l'annotation @suppressWarning.

    bon courage.

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    En effet le warning est "normal" car les Generics t'assure un code sécurisé sans ClassCastException. Or ce n'est pas le cas avec ton code...


    Le danger vient du fait que si la liste renvoyé contient autre chose que des User, tu te retrouveras avec une ClassCastException non pas sur le cast, mais lors de la lecture de cet objet (par exemple dans ton itérateur).

    a++

Discussions similaires

  1. [Débutant] web-service-rest-avec-wcf-3-5. comment faire un PUT d'une Liste d'object ?
    Par denfer06 dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 16/04/2014, 14h48
  2. Réponses: 3
    Dernier message: 13/09/2011, 16h16
  3. Caster une liste
    Par pingoui dans le forum Débuter avec Java
    Réponses: 13
    Dernier message: 11/06/2010, 13h43
  4. parcourir une liste d object
    Par ghnawfal dans le forum JSF
    Réponses: 4
    Dernier message: 11/09/2008, 11h18
  5. Peut faire un Dispose d'une List(Of object) ?
    Par MadLion dans le forum VB.NET
    Réponses: 6
    Dernier message: 19/11/2007, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo