Maison > Java > javaDidacticiel > Comment puis-je combiner les contraintes de classe et d'interface à l'aide de génériques Java ?

Comment puis-je combiner les contraintes de classe et d'interface à l'aide de génériques Java ?

DDD
Libérer: 2024-12-05 08:40:12
original
965 Les gens l'ont consulté

How Can I Combine Class and Interface Constraints Using Java Generics?

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>
Copier après la connexion

ou

Class<? extends InterfaceB>
Copier après la connexion

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>
Copier après la connexion

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)
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal