Java-Generika mit Klassen- und Schnittstellenkompatibilität
In Java kann das Erstellen eines Klassenobjekts mit bestimmten Einschränkungen eine Herausforderung sein. Ein häufiges Szenario ist die Definition eines Klassenobjekts, das eine bestimmte Klasse erweitert und gleichzeitig eine bestimmte Schnittstelle implementiert. Das gleichzeitige Erreichen beider Einschränkungen mithilfe von Generika war jedoch ein häufiger Streitpunkt.
Versuche, eine Klasse zu zwingen, ClassA zu erweitern und die Schnittstelle InterfaceB mit der Syntax zu implementieren:
Class<? extends ClassA>
oder
Class<? extends InterfaceB>
erfüllt nur eine Anforderung und lässt sich nicht kombinieren beides.
Lösung
Glücklicherweise ermöglichen Java-Generika mehrere Schnittstellen oder Klassen-plus-Schnittstellen. Um dies zu erreichen, ändern Sie die Wildcard-Deklaration wie folgt:
<T extends ClassA & InterfaceB>
Wie im Generics Tutorial von Sun dargestellt, kann durch Anhängen von & InterfaceName für jede zusätzlich erforderliche Schnittstelle eine beliebig komplexe Kombination erreicht werden. Beispielsweise zeigt die JavaDoc-Deklaration von Collections#max diese Komplexität:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Die Wahrung der Binärkompatibilität erfordert diese komplizierten Deklarationen.
Implementierung mit Klassen- und Schnittstellenbeschränkungen
Um die gewünschte Einschränkung in einer Variablendeklaration zu implementieren, platzieren Sie eine generische Grenze auf a Klasse:
class classB { } interface interfaceC { } public class MyClass<T extends classB & interfaceC> { Class<T> variable; }
Fazit
Java-Generika bieten flexible Möglichkeiten zum Erstellen eingeschränkter Klassen- und Schnittstellenkombinationen. Durch das Verständnis der Syntax und Einschränkungen können Entwickler diese Macht nutzen, um spezifische Anforderungen in ihrem Code durchzusetzen.
Das obige ist der detaillierte Inhalt vonWie kann ich Klassen- und Schnittstellenbeschränkungen mithilfe von Java Generics kombinieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!