Interfaces et polymorphisme : je ne comprends pas cette syntaxe

Résolu/Fermé
Dédé Grogon Messages postés 115 Date d'inscription samedi 11 février 2012 Statut Membre Dernière intervention 22 septembre 2014 - 12 févr. 2013 à 20:38
Dédé Grogon Messages postés 115 Date d'inscription samedi 11 février 2012 Statut Membre Dernière intervention 22 septembre 2014 - 13 févr. 2013 à 12:02
Bonjour,

Je viens de recontrer dans un code Java la ligne suivante. Il s'agit de la définition d'une interface :

public interface MonInterface<T> {

et plus loin je vois des stéréotypes de fonctions de la forme :

public abstract boolean maFonction ( T element );

Je ne comprends pas ces syntaxes. Toute aide sera bienvenue.

Merci :-)

1 réponse

KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
12 févr. 2013 à 20:45
Ce sont des types paramétrés. Tu pourras utiliser T avec n'importe quelle classe.

Exemple, avec la classe LinkedList<T> et la méthode add(T) :

LinkedList<String> liste1 = new LinkedList<Integer>();
liste1.add(1);
liste1.add(2);
liste1.add(3);

LinkedList<String> liste2 = new LinkedList<String>();
liste2.add("bonjour");
liste2.add("au-revoir");
2
Dédé Grogon Messages postés 115 Date d'inscription samedi 11 février 2012 Statut Membre Dernière intervention 22 septembre 2014 1
12 févr. 2013 à 21:35
Merci pour la réponse. Donc si je comprends bien, c'est un paramètre utilisé surtout par le constructeur? Par exemple, new LinkedList<String>() indique qu'on a affaire à une liste chainée de String.

Dans mon cas, quelle est la bonne syntaxe pour le prototype du constructeur?
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
12 févr. 2013 à 21:49
Si le type paramétré appartient à la classe il n'est pas nécessaire de le spécifier à nouveau dans le constructeur. Tu peux donc écrire ton constructeur normalement.
En revanche, ce serait différent si le type paramétré n'était pas de classe, par exemple si la méthode est static, ou si elle fait intervenir un autre type paramétré.

Exemple :

public class MaClasse<T> implements MonInterface<T>
{
    public MaClasse()
    {
    }
    
    public boolean maFonction(T element)
    {
        return true;
    }
    
    public void <U> autreFonction(T t, U u)
    {
    }
    
    public static <T> void methodeStatique(MaClasse<T> classe, T element)
    {
    }
}
0
Dédé Grogon Messages postés 115 Date d'inscription samedi 11 février 2012 Statut Membre Dernière intervention 22 septembre 2014 1
12 févr. 2013 à 22:18
Et quelle serait la bonne syntaxe si je voulais que ma classe soit construite comme dans ton exemple :

MaClasse<String> liste1 = new MaClasse<String>();


Il faudrait surcharger l'opérateur?
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
Modifié par KX le 12/02/2013 à 23:34
Il n'y a rien à faire, c'est automatique.
Tu peux directement écrire cette ligne de code avec ma classe.

Remarque, il fallait lire : public <U> void autreFonction(T t, U u), dans cet ordre
0
Dédé Grogon Messages postés 115 Date d'inscription samedi 11 février 2012 Statut Membre Dernière intervention 22 septembre 2014 1
13 févr. 2013 à 01:36
Merci j'ai réussi à faire marcher mon programme mais je me rends compte qu'il faut que j'en apprenne plus sur les types paramétrés. Est-ce que tu sais où en trouver ou en tout cas où chercher? Parce que je n'en ai pas trouvé d'assez approfondis sur Google.
0