324 votes

Génériques Java - pourquoi "T étend" autorisé mais pas "implémente T"?

Je me demande s'il existe une raison spéciale en Java pour utiliser toujours " extends " plutôt que " implements " pour définir les limites des paramètres de type.

Exemple:

 public interface C {}
public class A<B implements C>{}
 

est interdite mais

 public class A<B extends C>{}
 

est correct. Quelle est la raison de ceci?

336voto

Tetsujin no Oni Points 3646

Il n'y a pas de différence sémantique dans le langage de contraintes génériques entre le fait qu'une classe «implémente» ou «étend». Les possibilités de contraintes sont 'extends' et 'super' - c'est-à-dire, est-ce que cette classe fonctionne avec assignable à l'autre (extends), ou cette classe est-elle assignable à partir de celle-là (super).

19voto

beetstra Points 2246

Probablement parce que, pour les deux côtés (B et C), seul le type est pertinent, la mise en œuvre. Dans votre exemple

public class A<B extends C>{}

B peut être une interface en tant que bien. "s'étend" est utilisé pour définir des sous-interfaces ainsi que des sous-classes.

interface IntfSub extends IntfSuper {}
class ClzSub extends ClzSuper {}

J'ai l'habitude de penser à 'Sous étend Super' comme 'Sous , c'est comme Super, mais avec des fonctionnalités supplémentaires", et "la Clozapine implémente Intf "comme"la Clozapine est une réalisation de Intf'. Dans votre exemple, ce serait un match: B est comme le C, mais avec des fonctionnalités supplémentaires. Les capacités sont pertinents, mais pas la réalisation.

7voto

ntg Points 498

Voici un exemple plus détaillé d'où s'étend est autorisé et éventuellement ce que vous voulez:

public class A<T1 extends Comparable<T1>>

7voto

C’est peut-être que le type de base est un paramètre générique, donc le type réel peut être une interface d’une classe. Tenir compte :

Également du code client perspective interfaces sont presque impossibles à distinguer des classes, alors que pour le sous-type, il est important.

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