ArrayList<Object>

Résolu
tunisiano22 Messages postés 7 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 17 avril 2011 - 5 oct. 2010 à 13:51
tunisiano22 Messages postés 7 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 17 avril 2011 - 6 oct. 2010 à 16:31
Bonjour ts le monde,

svp j'ai besoin d'aide, je veux savoir :
1- si possible d'enregistrer dans une même List plusieurs Object de type differents.
2- Comment manipuler les ArrayList<Object>? j'ai testé mais les données insérer ne sont pas les mêms récupérer??

5 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
5 oct. 2010 à 18:12
Il y a une solution plus propre que faire une ArrayList<Object>, je ne sais pas combien de types différents tu veux mettre dans ton arrayList, admettons qu'il y ait deux types d'objets différents nommés Classe1 et Classe2. Si tu les met dans la meme liste, c'est que ces classes ont au moins une méthode commune, cette méthode on va dire que c'est afficher() Tu fais comme ceci :
public interface Interface {
   //Donne un nom plus parlant à l'interface
   // La tu définis les méthodes obligatoirement présentes
   public void afficher();
}

public class Classe1 implement Interface{
   public void afficher(){
      System.out.println("classe 1");
   }

}
public class Classe2 implement Interface{
   public void afficher(){
      System.out.println("classe 2");
   }
}



   List liste = new ArrayList();
   liste.add(new Classe1());
   liste.add(new Classe2());

   for(Interface i : liste){
      i.afficher();
   }



Et la, merci le polymorphisme, tu auras dans la console :
classe 1
classe 2
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
5 oct. 2010 à 15:41
Salut,

Je ne sais pas trop si j'ai bien compris le sens de ta question mais bon voici un exemple pour te répondre :
public class Test {

  private static class PourTest { } // classe pour le test

  public static void main(String[] args) {
    List<Object> list = new ArrayList<Object>();
    list.add(10); // ajout d'un Integer
    list.add(0.5f); // ajout d'un Float
    list.add(1000L); // ajout d'un Long
    list.add(true); // ajout d'un Boolean
    list.add("plop"); // ajout d'un String
    list.add(new PourTest()); // ajout d'un objet
    
    for(Object o : list) {
      if(Integer.class.isInstance(o)) {
        int i = (Integer)o;
        System.err.println("Objet de type int : " + i);
      } else if(Float.class.isInstance(o)) {
        float f = (Float)o;
        System.err.println("Objet de type float : " + f);
      } else if(Long.class.isInstance(o)) {
        long l = (Long)o;
        System.err.println("Objet de type long : " + l);
      } else if(Boolean.class.isInstance(o)) {
        boolean b = (Boolean)o;
        System.err.println("Objet de type boolean : " + b);
      } else if(String.class.isInstance(o)) {
        String s = (String)o;
        System.err.println("Objet de String : " + s);
      } else if(PourTest.class.isInstance(o)) {
        PourTest pt = (PourTest)o;
        System.err.println("Objet de type PourTest : " + pt);
      }
    }
  }
}


Faire un mixte d'objets dans tes listes n'est pas super safe mais bon ...


------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
tunisiano22 Messages postés 7 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 17 avril 2011
6 oct. 2010 à 11:08
Merci bcp pour votre repenses. Je veux dire par Object, une instanciation de classe. Mon Arraylist comportera un nbr important d'Objet dont le type n'est le même (type Personne, voiture ?exple) je pense que je vais faire un ArrayList par type d'Objet.
pour le deuxième point est ce qq'1 peut m'aider? j'arrive tj pas à avoir les mêmes données enregistrés: si par exple je fais :
BTS A = new BTS (AZ, AZ,..);
BTS B = new BTS (AZ, AZ,..);
ArrayList bts = new ArrayList();
bts.add(A);
bts.add(B);
.....
bts.get(1)
j'aurai comme resultat ----> [Trswc@bgs

Merci d'avance.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
6 oct. 2010 à 15:36
Je pense que ce que tu décris par [Trswc@bgs est une adresse mémoire, redéfinit la méthode toString() dans la classe BTS et ca ira.

Je pense que tu gagnerais à créer une interface, ca t'éviterais d'insérer tout et n'importe quoi dans ta liste, mais tu fais comme tu préfères.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tunisiano22 Messages postés 7 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 17 avril 2011
6 oct. 2010 à 16:31
Ok,
Merci bcp
0
Rejoignez-nous