Heim > Java > javaLernprogramm > Wie kann ich Klassen- und Schnittstellengrenzen in Java Generics kombinieren?

Wie kann ich Klassen- und Schnittstellengrenzen in Java Generics kombinieren?

Susan Sarandon
Freigeben: 2024-12-05 22:58:10
Original
539 Leute haben es durchsucht

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

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.

Beides geht nicht?

Zunächst könnten Sie versuchen, die folgenden Platzhalter zu verwenden:

Class<? extends ClassA>
Nach dem Login kopieren

oder

Class<? extends InterfaceB>
Nach dem Login kopieren

Wenn Sie jedoch eine davon verwenden, können Sie nicht beide Anforderungen gleichzeitig durchsetzen.

A Lösung

Der Schlüssel dazu ist die Verwendung mehrerer Grenzen in Ihrem Platzhalter. Die Syntax für einen solchen Platzhalter lautet:

<T extends Class & Interface>
Nach dem Login kopieren

Anwenden auf unser Szenario erhalten wir:

Class<? extends ClassA & InterfaceB>
Nach dem Login kopieren

Begrenzte Typparameter

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.

Komplexe Beispiele

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)
Nach dem Login kopieren

Diese ausgefeilte Syntax gewährleistet Binärkompatibilität und erzwingt gleichzeitig bestimmte Typbeschränkungen.

Verwendung einer generischen Klasse

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;
}
Nach dem Login kopieren

Dieser Ansatz ermöglicht Sie können eine Variable erstellen, die die gewünschten Einschränkungen aufweist, wie zum Beispiel:

MyClass<ClassB>.variable
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage