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
Susan SarandonOriginal
2024-12-05 22:58:10501Durchsuche

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>

oder

Class<? extends InterfaceB>

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>

Anwenden auf unser Szenario erhalten wir:

Class<? extends ClassA & InterfaceB>

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)

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;
}

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!

Stellungnahme:
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