87 votes

Quelle est la différence entre ' super ' et ' s’étend ' dans les génériques de Java

Je suis en train d’apprendre les génériques de Java. Je ne suis pas clair lorsque vous utiliserez et quand vous utiliserez . Comment chacun de ces choses de moyenne environ T ? Permet de dire que j’ai et , que faire de chacune de ces moyenne ?

J’ai lu plusieurs didacticiels sur sun.com mais je suis encore perdue. Si quelqu'un peut illustrer avec des exemples ?

Merci !

290voto

R Samuel Klatchko Points 44549

Tout dépend de quelle manière sur la hiérarchie d’héritage, il permet. Supposons que vous ayez une classe « Enfant » qui hérite de « Parent » qui hérite de « Grand-mère ».

accepte soit Parent ou enfant tout en accepte soit Parent ou grand-parent.

18voto

Ivo Bosticky Points 2986

Il existe trois types de caractères génériques :

  • : Désigne une famille de sous-types du type . C’est le caractère générique plus utile.
  • : Désigne une famille de supertypes de type .
  • ``: Désigne l’ensemble de tous les types ou de tout.

15voto

whiskeysierra Points 2175

Voir Java efficace 2e édition, point 28 :

PECS

Pqui extends, Consumer super

Si votre paramètre est un producteur, il doit être , si c’est un consommateur, il doit être .

Jetez un oeil à la collection de Google, ils savent comment l’utiliser, parce qu’ils ont obtenu Bloch  ;)

15voto

Pour moi, la meilleure réponse est venue de @BSingh, quand j'ai lu l'article de l'Oncle Bob. Je reprends ici, la conclusion de l'article.

Utilisation de la Liste< T super Costume> chaque fois que vous allez écrire dans la liste.

Lorsque vous mettez un Objet de la Liste, tout ce qui vous intéresse, c'est que l'objet est d'un type compatible avec type détenus par la liste. Donc, vous voulez la liste, de prendre le type de l'objet ou de l'un des super-classes de cet objet.

Utilisation de la Liste< T extends Costume> chaque fois que vous allez lire à partir d'une liste.

D'autre part, quand vous lisez à partir d'une liste, vous souhaitez que le type que vous lisez à être le type de contenus byt la liste, ou un dérivé de ce type.

5voto

Alexander Pogrebnyak Points 24964

Si vous vous posez des questions à propos des paramètres de type, alors il n'y a pas d' <T super X> construire en Java. Délimitée paramètre ne peut extend, mais elle peut s'étendre à plus d'un type. E. g

public class MyClass< T extends Closeable & Runnable >
{
  // Closeable and Runnable are chosen for demonstration purposes only
}

Dans ce cas, si vous voyez MyClass< ConcreteT > alors ConcreteT doit être déclarée comme

public class ConcreteT
  implements Closeable, Runnable
{
   ...
}

Pour délimité les caractères génériques, lisez cet article. Lire l'article sur get-mettre de principe. Fondamentalement, super correspond write de la sémantique, extends correspond read de la sémantique.

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