Heim >Java >javaLernprogramm >Wie kann ich Klassen- und Schnittstellengrenzen in Java Generics kombinieren?
Java-Generika: Klassen- und Schnittstellengrenzen kombinieren
In Java bieten Generika die Möglichkeit, Typen zu definieren, die auf verschiedenen Objekttypen arbeiten können . Eine häufige Herausforderung entsteht, wenn Sie ein Klassenobjekt erstellen möchten, das darauf beschränkt ist, eine bestimmte Klasse zu erweitern und gleichzeitig eine bestimmte Schnittstelle zu implementieren.
Betrachten wir einen Anwendungsfall, in dem wir eine Klasse erstellen möchten Objekt, das eine Klasse darstellt, die ClassA erweitert und InterfaceB implementiert Schnittstelle.
Zunächst könnten Sie versuchen, die folgenden Platzhalter zu verwenden:
Class<? extends ClassA>
oder
Class<? extends InterfaceB>
Wenn Sie jedoch eine davon verwenden, können Sie nicht beide Anforderungen gleichzeitig durchsetzen.
Der Schlüssel dazu ist die Verwendung mehrerer Grenzen in Ihrem Platzhalter. Die Syntax für einen solchen Platzhalter lautet:
<T extends Class & Interface>
Anwenden auf unser Szenario erhalten wir:
Class<? extends ClassA & InterfaceB>
Wie in den Java Generics erläutert Im Tutorial können Sie mehrere Grenzen verwenden, um anzugeben, dass ein Typparameter eine bestimmte Klasse erweitern und eine oder mehrere Schnittstellen implementieren muss. Die Verwendung des &-Operators trennt die Grenzen.
Mit dieser Lösung können Sie Ihr Ziel zwar erreichen, sie kann jedoch komplex werden. Betrachten Sie beispielsweise die Collections#max-Methode in Java, die die folgende Deklaration hat:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Diese ausgefeilte Syntax gewährleistet Binärkompatibilität und erzwingt gleichzeitig bestimmte Typbeschränkungen.
In Ihrem Anwendungsfall können Sie eine generische Klasse mit den gewünschten Grenzen erstellen:
public class MyClass<T extends ClassA & InterfaceB> { Class<T> variable; }
Dieser Ansatz ermöglicht Sie können eine Variable erstellen, die die gewünschten Einschränkungen aufweist, wie zum Beispiel:
MyClass<ClassB>.variable
Das obige ist der detaillierte Inhalt vonWie kann ich Klassen- und Schnittstellengrenzen in Java Generics kombinieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!