Différences liées aux supertypes dans les génériques Java
En Java, lors de la définition des limites des paramètres de type, vous avez peut-être remarqué la présence de « étend » mais pas les « instruments ». Cette disparité a suscité la curiosité de comprendre pourquoi c'est le cas.
Pourquoi aucun «implémente T» ?
Contrairement à «étend», qui indique une relation de supertype où le La sous-classe partage la même interface, « implémente » désigne une relation d'implémentation dans laquelle la classe implémente les méthodes spécifiées par l'interface. Cette distinction devient apparente lors de la compilation.
Considérons l'exemple ci-dessous :
<code class="java">interface C {} class A<B extends C> {} // Allowed class A<B implements C> {} // Not allowed</code>
Dans le premier exemple, le paramètre de type B est délimité par la classe C utilisant "extends". Cela permet à B d'être égal à ou une sous-classe de C. Dans le deuxième exemple, "impléments" est utilisé, ce qui permet uniquement à B d'être une interface implémentant C. Cependant, les paramètres de type ne peuvent pas spécifier d'interfaces d'implémentation.
Raison de "étend T"
Le langage de contraintes générique de Java se concentre sur les relations de supertype. "extends" vous permet de restreindre un paramètre de type à une superclasse ou une interface spécifique, garantissant que le type sera toujours attribuable à ce supertype. Cela maintient les principes de sécurité des types et d'héritage en Java.
D'un autre côté, les « impléments » ne correspondent pas à ce paradigme car ils définissent une relation d'implémentation plutôt qu'une relation de supertype. Par conséquent, "étend" est l'option privilégiée et unique pour définir des limites sur les paramètres de type.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!