Partage
  • Partager sur Facebook
  • Partager sur Twitter

Généricité

Problème pour méthode des types paramétrés

    20 septembre 2011 à 10:19:54

    Bonjour,

    J'ai déclaré mes propres objets contenant tous une méthode getID().
    Je voudrais faire une classe générique de ce style :

    public class hello<T> {
    
    public void sayID(T objet){
    return objet.getID();
    }
    
    
    }
    


    Mais j'ai une erreur qui me dit que il ne connait pas la méthode... C'est logique T est inconnu et c'est seulement lors de l'exécution qu'il pourra appeler la méthode non ?

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2011 à 10:31:55

      Mis à part le fait que tu fais un return pour un type void -> aucun intérêt ici :p .

      Soit tu fais un cast mais pour le coup tu perds tout le bénéfice du générique, ou tu fais une interface qui va rassembler les méthodes communes à tes objets et après tu changes la déclaration de ton générique.

      public interface Id {
         public long getId();
      }
      

      public class Hello<T extends Id> {
         
         public void sayId(T object) {
            System.out.println(object.getId());
         }
      }
      

      public class Test implements Id {
      
         public long getId(){
            return 12345;
         }
      }
      

      public static void main(String[] args) {
         
         Hello<Test> hello = new Hello<Test>();
         Test t = new Test();
         test.sayId(t);
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
        20 septembre 2011 à 10:36:33

        Effectivement pour void c'est une erreur. Dans la réalité getID() me renvoie aussi un objet que je créé...
        Ca m'à l'air compliqué tout ça, je débute en java. Je vais passer par une surcharge.

        Merci de ta réponse
        • Partager sur Facebook
        • Partager sur Twitter

        Généricité

        × 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