web-dev-qa-db-fra.com

Que signifie la syntaxe <E> en Java?

J'ai rapidement recherché une réponse sur Google, mais je n'ai pas pu trouver/penser à des paramètres de recherche précis.

J'apprends moi-même Java, mais je n'arrive pas à trouver le sens d'une certaine syntaxe.

public class Node<E>{
    E elem;
    Node<E> next, previous;
}

Que fait le <E> signifie? Je me souviens vaguement des croisillons ayant quelque chose à voir avec les vecteurs mais d'après le code ci-dessus, j'ai l'impression que cela a à voir avec les énumérations.

Toute aide ou clarification serait grandement appréciée. Merci.

37
d.lanza38

Ceux-ci sont appelés Generics .

En général, ceux-ci permettent à types (classes et interfaces) d'être des paramètres lors de la définition des classes, interfaces et méthodes.

L'utilisation de génériques offre de nombreux avantages par rapport à l'utilisation de code non générique, comme le montre le didacticiel Java:

  • Contrôles de type plus forts au moment de la compilation. A Java applique une vérification de type forte au code générique et génère des erreurs si le code viole la sécurité du type. La correction des erreurs de compilation est plus facile que la correction des erreurs d'exécution, qui peuvent être difficiles à trouver.

    Par exemple:

    // without Generics
    List list = new ArrayList();
    list.add("hello");
    
    // With Generics
    List<Integer> list = new ArrayList<Integer>();
    list.add("hello"); // will not compile
    
  • Permettre aux programmeurs d'implémenter des algorithmes génériques. En utilisant des génériques, les programmeurs peuvent implémenter des algorithmes génériques qui fonctionnent sur des collections de différents types, peuvent être personnalisés et sont de type sécurisé et plus facile à lire.

  • Élimination des lancers.

    Par exemple, l'extrait de code suivant sans génériques nécessite une conversion:

    List list = new ArrayList();
    list.add("hello");
    String s = (String) list.get(0);
    

    Lorsqu'il est réécrit pour utiliser des génériques, le code ne nécessite pas de transtypage:

    List<String> list = new ArrayList<String>();
    list.add("hello");
    String s = list.get(0); // no cast
    
42
blacktide

Ici <E> désigne le paramètre type de Node class. Le paramètre type définit qu'il peut faire référence à n'importe quel type (comme String, Integer, Employee etc.). Java ont des conventions de dénomination des paramètres de type comme suit:

  1. T - Type
  2. E - Élément
  3. K - Clé

  4. N - Nombre

  5. V - Valeur

Par exemple, prenez le scénario suivant

public class Node<E>{
   E elem;
   Node<E> next, previous;
}
class Test{
   Node<String> obj = new Node<>();
}

Pour le scénario ci-dessus, en arrière-plan la classe Node 'E' fera référence au type String et la classe ressemblera à la suivante

public class Node<String>{
   String elem;
   Node<String> next,previous;
}

Non seulement String, vous pouvez également utiliser Entier, Caractère, Employé, etc. comme paramètre de type.

Vous pouvez également utiliser des génériques avec Interface, méthode et constructeur.

Pour en savoir plus sur les génériques, visitez ces sites:

https://www.journaldev.com/1663/Java-generics-example-method-class-interfacehttps://www.javatpoint.com/generics-in-Java

10
SHB

Le nœud implique la classe "Generics".

Voir: http://docs.Oracle.com/javase/tutorial/Java/generics/types.html

1
code2use

C'est la syntaxe Java pour indiquer un type générique. Cela signifie essentiellement qu'il peut s'agir d'un objet Node qui peut prendre n'importe quel type).

vous devriez vérifier this pour un bon turorial sur Java generics

0
WillBD