290 votes

Génériques Java? , E et T quelle est la différence?

Je tombe sur du code Java comme ceci:

 public interface Foo<E> {}

public interface Bar<T> {}

public interface Zar<?> {}
 

Quelle est la différence entre les trois précédents et ce qu’ils appellent ce type de déclerations de classe ou d’interface en Java?

258voto

Jon Skeet Points 692016

Eh bien il n'y a pas de différence entre les deux premières, ils sont juste en utilisant des noms différents pour le paramètre de type (E ou T).

Le tiers n'est pas une déclaration valide - ? est utilisé comme un caractère générique qui est utilisé lors de la fourniture d'un type d' argument, par exemple, List<?> foo = ... signifie qu' foo fait référence à une liste d'un certain type, mais nous ne savons pas quoi.

Tout cela est de génériques, ce qui est un très vaste sujet. Vous pouvez apprendre à ce sujet par les ressources suivantes, bien qu'il y a plus de disponible, bien sûr:

236voto

ratchet freak Points 22412

c'est plus conventionnel qu'autre chose

T est censé être un type
E est censé être un élément ( List<E> : une liste d'éléments)
K est la clé (dans un Map<K,V> )
V est la valeur (en tant que valeur de retour ou valeur mappée)

ils sont totalement interchangeables (nonobstant des conflits dans la même déclaration)

30voto

Uva Points 56

Une variable de type peut être n'importe quel type non primitif spécifié: tout type de classe, tout type d'interface, tout type de tableau ou même une autre variable de type.

Les noms de paramètre de type les plus couramment utilisés sont:

  • E - Element (largement utilisé par Java Collections Framework)
  • K - clé
  • N - nombre
  • T - Type
  • V - Valeur

En Java 7, il est permis d'instancier comme ceci:

 Foo<String, Integer> foo = new Foo<>(); // java 7 
Foo<String, Integer> foo = new Foo<String, Integer>(); // java 6
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X