Heim > Java > javaLernprogramm > Wie kann ich eine generische Java-Klasse darauf beschränken, eine Klasse zu erweitern und gleichzeitig eine Schnittstelle zu implementieren?

Wie kann ich eine generische Java-Klasse darauf beschränken, eine Klasse zu erweitern und gleichzeitig eine Schnittstelle zu implementieren?

Barbara Streisand
Freigeben: 2024-12-08 02:44:15
Original
453 Leute haben es durchsucht

How Can I Restrict a Java Generic Class to Extend a Class and Implement an Interface Simultaneously?

Java-Generika mit einer Klasse und einer Schnittstelle

Bei der Arbeit mit Generika in Java kann es sein, dass Sie den Typ einer generischen Klasse einschränken müssen, um eine bestimmte Klasse zu erweitern Klasse und Implementierung einer bestimmten Schnittstelle. Es ist zwar davon auszugehen, dass die folgenden Versuche erfolgreich sein werden:

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

Leider kann jeweils nur einer davon angewendet werden. Wie können wir also die beiden Einschränkungen kombinieren?

Die Lösung: Mehrere begrenzte Typparameter

Tatsächlich ist es möglich, mehrere Schnittstellen oder eine Klasse und Schnittstellen in einem generischen Typparameter anzugeben „&“:

<T extends ClassA & InterfaceB>
Nach dem Login kopieren

Dies ermöglicht uns die Definition eines generischen Typs, der sowohl auf die Erweiterung der angegebenen Klasse als auch auf die Implementierung der angegebenen Klasse beschränkt ist Schnittstelle.

Wenn wir beispielsweise eine Klasse ClassB und eine Schnittstelle InterfaceC definieren, können wir eine generische Klasse wie folgt erstellen:

class MyClass<T extends ClassB & InterfaceC> {
    Class<T> variable;
}
Nach dem Login kopieren

Dadurch wird sichergestellt, dass das Variablenfeld von MyClass nur kann enthalten Verweise auf Klassen, die ClassB erweitern und InterfaceC implementieren.

Überlegungen zur Komplexität und Kompatibilität

Während diese Funktion Flexibilität beim Definieren bietet Bei generischen Typen kann es auch zu komplexen Deklarationen kommen, wie in der JavaDoc-Deklaration von Collections#max zu sehen ist:

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Nach dem Login kopieren

Diese Komplexität entsteht aufgrund von Überlegungen zur Binärkompatibilität. Es ist jedoch wichtig zu beachten, dass diese Komplexität hauptsächlich bei der Definition generischer Klassen oder Methoden und nicht bei der Deklaration generischer Variablen auftritt.

Daher müssen Sie Ihr Ziel erreichen, ein Klassenobjekt zu erstellen, das eine bestimmte Klasse erweitert und eine bestimmte Schnittstelle implementiert, können Sie den folgenden Ansatz verwenden:

class classB { }
interface interfaceC { }

public class MyClass<T extends classB & interfaceC> {
    T variable;
}
Nach dem Login kopieren

Dadurch erhalten Sie die gewünschte Einschränkung für das Variablenfeld von MyClass.

Das obige ist der detaillierte Inhalt vonWie kann ich eine generische Java-Klasse darauf beschränken, eine Klasse zu erweitern und gleichzeitig eine Schnittstelle zu implementieren?. 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