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 :

[java 1.5]tableaux génériques


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut [java 1.5]tableaux génériques
    Bonjour,
    J'ai un ArrayList a qui contient des chiffres de 1 à 9

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ArrayList<Integer> a = new ArrayList<Integer>();
    for (int i=1;i<=9;i++){
    	a.add(i);
    }
    System.out.println(a);
    Je veux maintenant construire un tableau b d'ArrayList tel que chaque élément contient les chiffres de 1 à 9. En java 1.4, j'écrivais

    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
     
    import java.util.*;
    public class T2{
    	public static void main ( String [ ] args ) {
    		ArrayList b [ ] = new ArrayList [ 9 ] ;
    		for ( int i = 0 ; i < 9 ; i++) {
    			b[i] = new ArrayList();
    			for (int j = 1 ; j <= 9 ; j++){
    				b [ i ] . add ( new Integer ( j ) );
    			}
    		}
    		for ( int i = 0 ; i < 9 ; i++) {
    			System.out.println(b[i]);
    		}
    	}
    }
    ce programme compile en 1.5 mais j'obtient les warnings suivants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Note: T2.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    Je n'arrive pas à déclarer un tableau de 9 ArrayList d'Integer:

    Merci de votre aide



  2. #2
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Et en remplaçant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    b[i] = new ArrayList();
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    b[i] = new ArrayList<Integer>();
    dans ta classe T2 :

  3. #3
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    est-ce que le programme compile en 1.4 sans warning?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut [java 1.5]tableaux génériques
    J'ai fais la correction indiquée
    b[i] = new ArrayList<Integer>();
    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
    import java.util.*;
    public class T2{
    	public static void main ( String [ ] args ) {
    		ArrayList b [ ] = new ArrayList [ 9 ] ;
    		for ( int i = 0 ; i < 9 ; i++) {
    			b[i] = new ArrayList<Integer>();
    			for (int j = 1 ; j <= 9 ; j++){
    				b [ i ] . add ( new Integer ( j ) );
    			}
    		}
    		for ( int i = 0 ; i < 9 ; i++) {
    			System.out.println(b[i]);
    		}
    	}
    }
    Les warnings subsistent.
    : :
    Mon but est de créer une matrice de 9 lignes de 9 colonnes d'ArrayList chacun d'eux contenant les chiffres de 1 à 9 ( ça sent le sudoku )

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut [java 1.5]tableaux génériques
    Le programme sans générique compile sans warning sous 1.4

  6. #6
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Y'aurait peut être un autre remplacement à faire

    Toujours dans T2 remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList b [ ] = new ArrayList [ 9 ] ;
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList <Integer> b [ ] = new ArrayList <Integer> [ 9 ] ;

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut [java 1.5]tableaux génériques
    Après la deuxième correction proposée
    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
    import java.util.*;
    public class T2{
    	public static void main ( String [ ] args ) {
    		ArrayList <Integer>  [ ]  b   = new ArrayList <Integer> [ 9 ] ;
    		for ( int i = 0 ; i < 9 ; i++) {
    			b[i] = new ArrayList<Integer>();
    			for (int j = 1 ; j <= 9 ; j++){
    				b [ i ] . add ( new Integer ( j ) );
    			}
    		}
    		for ( int i = 0 ; i < 9 ; i++) {
    			System.out.println(b[i]);
    		}
    	}
    }
    J'obtiens un message d'erreur:
    T2.java:4: generic array creation
    ArrayList <Integer> [ ] b = new ArrayList <Integer> [ 9 ] ;
    ^
    1 error
    : : :

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Par défaut
    En fait moi je les crée comme ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Type> monTableau = new ArrayList<Type>();
    rien de plus...

    Explication: ArrayList est un objet qui gère des tableaux de base (donc avec [] ), mais lui ne les nécéssite pas, même il ne doit pas en avoir.

    8)

  9. #9
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par ypicman
    En fait moi je les crée comme ci:

    ArrayList<Type> monTableau = new ArrayList<Type>();

    rien de plus...

    Explication: ArrayList est un objet qui gère des tableaux de base (donc avec [] ), mais lui ne les nécéssite pas, même il ne doit pas en avoir.

    8)
    Mais la tu as une simple collection, alors que parsy veut un tableau de collection...

    Par contre, je vois pas pourquoi ArrayList<Integer>[] = new ArrayList<Integer>[9]; ne marche pas...

  10. #10
    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,

    Citation Envoyé par parsy
    J'obtiens un message d'erreur:
    T2.java:4: generic array creation
    ArrayList <Integer> [ ] b = new ArrayList <Integer> [ 9 ] ;
    C'est normal car la création de tableau générique est interdite car elle peut poser certain problème peut évident à expliquer.

    Cela est dû au fait que le typage des classes génériques est effectué à la compilation alors que celui des tableaux est fait à l'exécution.

    Tu ne peux donc pas créer de tableau générique, tu es obligé de passer par un tableau simple et un warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Integer>[] b = new ArrayList[9];

    Si tu ne veut aucun warning et un code plus sûr, il faut passer par du tout générique et remplacer le tableau par une autre liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<List<Integer>>[] b = new ArrayList<List<Integer>>();
    a++

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut [java 1.5]tableaux génériques
    Merci beaucoup


  12. #12
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Faudrait vraiment que je me mette à Java 1.5.

  13. #13
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par adiGuba
    C'est normal car la création de tableau générique est interdite car elle peut poser certain problème peut évident à expliquer.
    Aurais-tu un petit lien à nous fournir ? Ce problème m'intéresse.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  14. #14
    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
    Je n'ai plus vraiment le lien en tête... mais j'ai vu plusieurs sujet là dessus sur les forum anglais de java.sun.com... et on en avait déjà parlé sur developpez.com : http://www.developpez.net/forums/vie...459418#2459418


    En fait l'objectif des Generics est le suivant : Si la compilation n'affiche aucune erreur ni warning, le code est typesafe. C'est à dire qu'il ne provoquera pas de ClassCastException.

    C'est pourquoi les Generics ont introduit un grand nombre de warning...

    Or ce n'est pas du tout le cas des tableaux car leurs type est vérifié à l'exécution seulement (alors que c'est à la compilation pour les générics). Ainsi un code qui compile parfaitement avec des tableaux peut provoquer une exception, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	Number[] numbers = new Integer[9];
    	numbers[0] = new Integer(0);
    	numbers[1] = new Long(1); // ArrayStoreException
    Ce code compile sans erreur ni warning mais provoquera une ArrayStoreException sur la dernière ligne car on veut mettre un Long dans un tableau d'Integer.

    Les Generics empêche ce genre de pratique car le code suivant ne compilera pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Number> integers = new ArrayList<Integer>();

    Si ce n'est pas clair n'hésite pas

    a++

  15. #15
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Merci, c'est bon à savoir

  16. #16
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    C'est très clair, merçi !
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Possibilités Java, types et tableaux
    Par slashrod dans le forum Général Java
    Réponses: 4
    Dernier message: 12/04/2008, 22h58
  2. tableaux en java
    Par goldorax113 dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2006, 19h11
  3. Tableaux "génériques": implémentation
    Par Alp dans le forum C++
    Réponses: 4
    Dernier message: 10/06/2006, 12h38
  4. Réponses: 4
    Dernier message: 05/10/2005, 18h19

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