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

avec Java Discussion :

Interface et Généricité


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut Interface et Généricité
    Bonsoir à tous ,
    voici une interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public interface Triable<T> {
        public int tri(T elem);
    }
    et voici ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class tri_exemple implements Triable<T> {
        public int tri(T elem) {return 1;}
        public static void main(String[] args) {
            ;
        }
    }
    Pourtant lors de la compilation j'obtiens des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    tri_exemple.java:8: cannot find symbol
    symbol: class T
    public class tri_exemple implements Triable<T> {
                                                ^
    tri_exemple.java:9: cannot find symbol
    symbol  : class T
    location: class tri_exemple
        public int tri(T elem) {;}
                       ^
    2 errors
    Je ne comprend pas ??

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ben, ton interface Triable a un paramètre <T>. Très bien, parfait.

    Et tu essaies d'implémenter cette interface avec une classe tri_exemple.

    C'est bien joli, mais il faut préciser ce que vaut le paramètre <T> de cette interface que tu implémentes, maintenant ! C'est quoi, <String>, <Date>, <OutputStream> ? Quoi ?

    Ou alors, ta classe tri_exemple est elle aussi paramétrée, et elle n'impose rien de plus au paramètre que ne le faisait déjà l'interface. Dans ce cas il faut le dire qu'elle est paramétrée aussi !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class tri_exemple<T> implements Triable<T> {
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    voilà ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class tri_exemple<T> implements Triable<T> {
        public int tri(T elem) {return 1;}
        public static void main(String[] args) {
            int i = 5;
            System.out.println(tri(i));
        }
    }
    mais maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tri_exemple.java:12: tri(T) in tri_exemple<T> cannot be applied to (int)
            System.out.println(tri(i));
                               ^
    1 error
    Pourquoi donc ??

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    T est un object, int n'est pas un Object. Utilise Integer.

  5. #5
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    En réalité je souhaite creer une méthode générique au sein d'une interface ,comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    publc interface Triable {
        public <Type> int methode(>Type> element);
    }
    et pouvoir l'utiliser comme celà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class maClasse {
        public <Type> int methode(<Type> element) { ... }
        public static main(String[] args) {
            int i = 5;
           double d = 2.36;
           String s = "blablabla";
     
           methode(i);methode(d);methode(s);
    }
    }
    Est ce correct ?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Non, ce n'est pas correct, on comprend rien à ce que tu dis.

    Arrête de faire des exemples partiels qui n'ont aucun sens et à la place, parle-nous exactement comme tu le ferais si on était pas dans ta tête et qu'on ne pouvait pas lire tes pensées :

    Explique nous, vraiment ce qu'il vont faire tes objets, vraiment en quoi ils ont un comportement commun que tu veux unifier de manière générique, et un exemple complet, avec point de départ et arrivée, d'à quoi ça va ressembler quand tu l'appelles et à quoi ça sert.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,
    Citation Envoyé par exe2bin Voir le message
    Est ce correct ?
    Non, déjà,parce que la méthode methode n'est pas static. Sans parler des autres approximations syntaxiques. Il faudrait par exemple :

    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
    17
    public class maClasse {
        public <Type> int methode(Type element) { 
        	System.out.println(element); 
        	return -1;
        }
        public static void main(String[] args) {
            int i = 5;
           double d = 2.36;
           String s = "blablabla";
     
           maClasse instance = new maClasse();
     
           instance.methode(i);
           instance.methode(d);
           instance.methode(s);
        }
    }
    Même pas besoin d'interface pour ça. Mais à quoi ça servirait au juste ? On peut écrire :
    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
    17
    public class maClasse {
        public int methode(Object element) { 
        	System.out.println(element); 
        	return -1;
        }
        public static void main(String[] args) {
            int i = 5;
           double d = 2.36;
           String s = "blablabla";
     
           maClasse instance = new maClasse();
     
           instance.methode(i);
           instance.methode(d);
           instance.methode(s);
        }
    }
    Même plus besoin de génériques.

    Lorsque tu crées une interface, le but est de l'implémenter dans une classe. Le type générique va permettre d'adapter la classe à un type particulier.

    Donc on peut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface Triable<Type> {
        public int methode(Type element);
    }
    Et l'implémenter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class IntegerTriable implements Triable<Integer> {
           public int methode(Integer element) {
                return element;
           }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class StringTriable implements Triable<String> {
           public int methode(String element) {
                return element.length();
           }
    }
    Et faire :
    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
    public class Exemple {
     
       public static void main(String[] args) {
     
               new IntegerTriable().methode(42);
               new StringTriable().methode("astalavista");
     
               new Triable<Double>() {
                    public int methode(Double element) {
                      return -1;
                   }
               }.methode(Math.PI);
       }
     
    }
    Je ne sais pas exactement ce que tu cherches à faire, mais peut-être serait-il plus simple que tu nous exposes le problème que tu cherches à résoudre avec tes mots à toi, plutôt que d'essayer de nous présenter quelque chose avec une syntaxe Java, pas forcément adaptée au problème que tu veux résoudre, ou suffisamment incorrecte pour qu'on ne comprenne pas ce que tu cherches à résoudre.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Interface et généricité
    Par grunk dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 30/05/2011, 14h45
  2. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  3. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  4. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  5. [VB6] [Interface] Icones de boutons de barre d'outils
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 13/09/2002, 15h50

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