Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de conversion entre Integer et int

    3 novembre 2019 à 12:14:02

    Bonjour,

    Dans le cadre d'un exercice j'essaie de définir une classe qui hérite de la classe ArrayList<E>. Je souhaite créer une classe qui gère une collection d'objets de type int.

    La classe implémente 4 méthodes basiques et explicites : maximum(), minimum(), moyenne() et tri().

    Mon problème apparaît lors de la compilation : Lorsque je tente de préciser dans la définition de la classe qu'elle n'attend que des objets de type Integer (en ajoutant <Integer> après le nom de la Classe), le compilateur bloque sur chaque variable de type int qui stocke un Integer et renvoie plusieurs erreurs "Error:(x, z) java: incompatible types: Integer cannot be converted to int". 

    Je pourrais certes transformer le type des variables qui posent problème, mais j'aimerais surtout comprendre l'origine de l'erreur alors que l'unboxing devrait permettre ce genre d'opérations. 

    Voici le code en question 

    import java.util.ArrayList;
    
    public class ListInteger<Integer> extends ArrayList<Integer> {
    
        public int maximum()
        {
    
            if(isEmpty())
                return 0;
    
            int retour = get(0);
    
            for(int var : this)
                if(var > retour)
                    retour = var;
    
            return retour;
        }
    
        public int minimum()
        {
            if(isEmpty())
                return 0;
    
            int retour = get(0);
    
            for(int var : this)
                if(var < retour)
                    retour = var;
    
            return retour;
        }
    
        public int moyenne()
        {
            if(isEmpty())
                return 0;
    
            int somme = 0;
    
            for(int var : this)
                somme += var;
    
            return somme/size();
        }
    
        public void tri()
        {
    
            if(isEmpty())
                return;
    
            ArrayList<Integer> copie = new ArrayList<Integer>(size());
    
            for(int var : this)
                copie.add(var);
    
            clear();
    
    
            while(!copie.isEmpty())
            {
                Integer min = minimum();
                add(min);
                copie.remove(min);
            }
    
        }
    
    
    }
    

    Je vous remercie d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      4 novembre 2019 à 5:48:16

      Bonjour,

      Tu as écrit ListInteger<Integer>. Ici, Integer représente un type générique.

      Le fait que la liste contienne des entiers est déjà dans ArrayList<Integer>, pas besoin d'en rajouter une couche. :)

      // Version correcte
      public class ListInteger extends ArrayList<Integer>

      Ca devrait régler ton problème

      -
      Edité par brubru777 4 novembre 2019 à 5:49:09

      • Partager sur Facebook
      • Partager sur Twitter
        5 novembre 2019 à 9:58:35

        C'est le cas, merci beaucoup :) 

        Tu saurais m'expliquer exactement les raisons de ce problème ? 

        • Partager sur Facebook
        • Partager sur Twitter
          6 novembre 2019 à 10:29:00

          Quand tu écris <Integer> dans la déclaration de ta classe, il prend ça pour le nom du type générique, et non pour le type Integer. C'est comme si tu avais écrit <U>, mais tu introduis une confusion parce que ton type générique a le même nom qu'une classe Integer qui existe.

          Et le compilateur ne sait pas comment caster un int en un type générique.

          • Partager sur Facebook
          • Partager sur Twitter

          Problème de conversion entre Integer et int

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown