Interfaces et polymorphisme : je ne comprends pas cette syntaxe

Résolu
Dédé Grogon Messages postés 115 Date d'inscription   Statut Membre Dernière intervention   -  
Dédé Grogon Messages postés 115 Date d'inscription   Statut Membre Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   1
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   1
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   1
 
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