Génériques Java avec compatibilité de classe et d'interface
En Java, créer un objet de classe avec des contraintes spécifiques peut être un défi. Un scénario courant consiste à définir un objet de classe qui étend une classe particulière tout en implémentant simultanément une interface spécifique. Cependant, la réalisation simultanée des deux contraintes à l'aide de génériques a été un point de discorde courant.
Tentatives visant à forcer une classe à étendre ClassA et à implémenter l'interface InterfaceB en utilisant la syntaxe :
Class<? extends ClassA>
ou
Class<? extends InterfaceB>
ne satisfera qu'une seule exigence et ne parviendra pas à se combiner les deux.
Solution
Heureusement, les génériques Java permettent plusieurs interfaces ou interfaces de classe plus. Pour y parvenir, modifiez la déclaration générique comme suit :
<T extends ClassA & InterfaceB>
Comme illustré dans le didacticiel Generics de Sun, en ajoutant & InterfaceName pour chaque interface requise supplémentaire, une combinaison arbitrairement complexe peut être obtenue. Par exemple, la déclaration JavaDoc de Collections#max démontre cette complexité :
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
La préservation de la compatibilité binaire nécessite ces déclarations complexes.
Implémentation avec des contraintes de classe et d'interface
Pour implémenter la restriction souhaitée dans une déclaration de variable, placez une limite générique sur un class :
class classB { } interface interfaceC { } public class MyClass<T extends classB & interfaceC> { Class<T> variable; }
Conclusion
Les génériques Java offrent des moyens flexibles de créer des combinaisons contraintes de classes et d'interfaces. En comprenant la syntaxe et les limites, les développeurs peuvent exploiter ce pouvoir pour appliquer des exigences spécifiques dans leur code.
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!