Lorsque vous travaillez avec des génériques en Java, vous pouvez rencontrer le besoin de restreindre le type d'une classe générique pour étendre une classe spécifique classe et implémenter une interface particulière. Bien qu'il semble raisonnable de s'attendre à ce que les tentatives suivantes réussissent :
Class<? extends ClassA>
Class<? extends InterfaceB>
Malheureusement, une seule d'entre elles peut être appliquée à la fois. Alors, comment pouvons-nous combiner les deux restrictions ?
En fait, il est possible de spécifier plusieurs interfaces ou une classe et des interfaces dans un paramètre de type générique en utilisant "&":
<T extends ClassA & InterfaceB>
Cela nous permet de définir un type générique qui se limite à la fois à l'extension de la classe spécifiée et à l'implémentation de la classe spécifiée. interface.
Par exemple, si nous définissons une classe ClassB et une interface InterfaceC, nous pouvons créer une classe générique comme suit :
class MyClass<T extends ClassB & InterfaceC> { Class<T> variable; }
Cela garantit que le champ variable de MyClass ne peut que contient des références à des classes qui étendent ClassB et implémentent InterfaceC.
Bien que cette fonctionnalité offre une flexibilité pour définissant des types génériques, cela peut également conduire à des déclarations complexes, comme le montre la déclaration JavaDoc de Collections#max :
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Cette complexité est due à des considérations de compatibilité binaire. Cependant, il est important de noter que cette complexité se rencontre principalement lors de la définition de classes ou de méthodes génériques, et non lors de la déclaration de variables génériques.
Par conséquent, pour atteindre votre objectif de créer un objet de classe qui étend une classe spécifique et implémente une interface spécifique, vous pouvez utiliser l'approche suivante :
class classB { } interface interfaceC { } public class MyClass<T extends classB & interfaceC> { T variable; }
Cela vous donnera la restriction souhaitée pour le champ variable de MyClass.
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!