Maison >Java >javaDidacticiel >Comment puis-je combiner les limites de classe et d'interface dans les génériques Java ?
Génériques Java : combiner les limites de classe et d'interface
En Java, les génériques offrent la possibilité de définir des types qui peuvent opérer sur différents types d'objets . Un défi courant se pose lorsque vous souhaitez créer un objet de classe limité pour étendre une classe spécifique tout en implémentant une interface spécifique.
Considérons un cas d'utilisation dans lequel nous souhaitons créer une Class objet qui représente une classe étendant ClassA et implémentant l'InterfaceB interface.
Au départ, vous pouvez essayer d'utiliser les caractères génériques suivants :
Class<? extends ClassA>
ou
Class<? extends InterfaceB>
Cependant, l'utilisation de l'un ou l'autre de ces éléments ne vous permettra pas d'appliquer les deux exigences simultanément.
La clé pour y parvenir est d'utiliser plusieurs limites dans votre caractère générique. La syntaxe d'un tel caractère générique est :
<T extends Class & Interface>
En appliquant cela à notre scénario, nous obtenons :
Class<? extends ClassA & InterfaceB>
Comme expliqué dans les génériques Java Dans le didacticiel, vous pouvez utiliser plusieurs limites pour spécifier qu'un paramètre de type doit étendre une classe donnée et implémenter une ou plusieurs interfaces. L'utilisation de l'opérateur & sépare les limites.
Bien que cette solution vous permette d'atteindre votre objectif, elle peut devenir complexe. Par exemple, considérons la méthode Collections#max en Java, qui contient la déclaration suivante :
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Cette syntaxe sophistiquée garantit la compatibilité binaire tout en appliquant des contraintes de type spécifiques.
Dans votre cas d'utilisation, vous pouvez créer une classe générique avec les limites souhaitées :
public class MyClass<T extends ClassA & InterfaceB> { Class<T> variable; }
Cette approche vous permet de créer une variable qui a les restrictions souhaitées, telles que :
MyClass<ClassB>.variable
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!