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 :

Infer Generic Type Arguments


Sujet :

Langage Java

  1. #1
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut Infer Generic Type Arguments
    Bonjour,

    Le warning (en intitulé de post ) dans un projet sous ECLIPSE apparait suite à ce type de code:
    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
    public MaClasse
    {
      public ArrayList[] tableauListe; // C'est ici que se trouve le Warning
     
      /.../
     
      // Constructeur:
      public MaClasse
      {
        tableauListe = new ArrayList[8];
     
        for ( int index = 0; index < 8; index++ )
          tableauListe[ index ] = new ArrayList<Long>();
     
      }
    }
    A l'origine, je voulais spécifier que tableauList est un tableau d'ArrayList contenant des objets de type Long. Mais je n'ai pas réussi à écrire la syntaxe. Du coup, je me suis rabattu sur celle que je vous indique dans le post. Je pense qu'Eclipse préférerait que le type d'objet soit identifié dès la déclaration... mais je ne sais pas comment lui indiquer.

    @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

  2. #2
    Membre confirmé Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Points : 558
    Points
    558
    Par défaut
    Si c'est du java5 c'est cette syntaxe que tu dois utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public ArrayList<Long>[] tableauListe;
    A prioris, il vaut mieux privilégier l'interface List à ArrayList dans la déclaration et rendre cet attribut privé.
    Librairie d'accès LDAP en Java : LdapBeans
    et pensez au tag

  3. #3
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Sachant que tu devras te contenter d'une initialisation imparfaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       tableauListe = new ArrayList[8];
    Il n'y a pas moyen de faire autrement, mais au moins dans le reste du code tu auras des ArrayList typées.

  4. #4
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Merci à vous deux pour cette réponse rapide.

    Effectivement j'avais tenté la syntaxe que vous m'avez indiquée, à savoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public ArrayList<Long>[] tableauListe;
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableauListe = new ArrayList[8];
    Cela fonctionne aussi, sauf que le Warning est déplacé sur la seconde ligne. J'ai trouvé quelques docs sur Internet concernant ce type de Warning, mais c'est ardu pour moi. La seule chose que je crains, c'est que dans une partie du programme, si je me loupe dans le casting, ça va faire du grabuge !

    C'est bête, mais si je déclarais 8 ArrayList, au lieu d'un tableau d'ArrayList(s), je n'aurais pas de souci.
    J'ai aussi essayé de faire un ArrayList d'ArrayList(s) mais sans conviction...

    @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

  5. #5
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par rtg57 Voir le message
    J'ai trouvé quelques docs sur Internet concernant ce type de Warning, mais c'est ardu pour moi.
    Pour faire simple : la vérification du type des tableaux est effectuée à l'exécution sur le "raw-type" (sans les Generics), alors que la vérification des Generics est faites à la compilation.

    Du coup si on mélange les deux il y a des failles qui permettent d'introduire un élément du mauvais type, ce qui va engendrer des erreurs plus loin dans le code (ce qui peut être difficile à corriger).

    Citation Envoyé par rtg57 Voir le message
    J'ai aussi essayé de faire un ArrayList d'ArrayList(s) mais sans conviction...
    Pourquoi ? Ce serait le plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public List<List<Long>> tableauListe;
     
      // Constructeur:
      public MaClasse {
        tableauListe = new ArrayList<List<Long>>(8);
     
        for ( int index = 0; index < 8; index++ )
          tableauListe.add( new ArrayList<Long>() );
      }
    a++

    PS : C'est pour faire quoi au fait ???

  6. #6
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Merci beaucoup pour cette réponse,

    j'ai du mal avec la syntaxe, voila pourquoi je n'ai pas réussi à faire un ArrayList d'ArrayList(s).
    Finallement, je constate que c'est très simple !

    Le but de ceci est d'avoir 8 listes d'objets Long, correspondant à 8 mois.

    Les objets Long évoluent dynamiquement, par contre les "8" mois sont fixés définitivement... d'où l'idée de faire un tableau sachant que le nombre de listes n'évoluera pas dynamiquement, contrairement aux items de celles-ci.
    Je trouve aussi qu'adresser un élément de tableau est plus "facile" que d'utiliser "ArrayList.get( index ).bidule"...quoique.

    En tout cas, la solution proposée à le mérite de faire sauter ce Warning qui ne me plait pas du tout.

    @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/05/2009, 09h11
  2. invalid type argument of ‘unary *’
    Par TimoP dans le forum Débuter
    Réponses: 7
    Dernier message: 18/02/2009, 14h31
  3. Warning "ArrayList is a raw type. References to generic type ArrayList<E>
    Par sandrine49 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/08/2008, 10h48
  4. Réponses: 3
    Dernier message: 06/03/2008, 21h59
  5. Réponses: 5
    Dernier message: 27/10/2006, 15h34

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