Maison >Java >javaDidacticiel >Comment puis-je combiner les limites de classe et d'interface dans les génériques Java ?

Comment puis-je combiner les limites de classe et d'interface dans les génériques Java ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 22:58:10501parcourir

How Can I Combine Class and Interface Bounds in Java Generics?

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.

Vous ne pouvez pas faire les deux ?

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.

A Solution

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>

Paramètres de type limités

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.

Exemples complexes

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.

Utilisation d'une classe générique

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!

Déclaration:
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