Heim > Java > javaLernprogramm > Können Java-Generika sowohl Klassen- als auch Schnittstellenbeschränkungen gleichzeitig erzwingen?

Können Java-Generika sowohl Klassen- als auch Schnittstellenbeschränkungen gleichzeitig erzwingen?

Barbara Streisand
Freigeben: 2024-12-09 09:04:05
Original
799 Leute haben es durchsucht

Can Java Generics Enforce Both Class and Interface Constraints Simultaneously?

Java-Generika: Klassen- und Schnittstellenbeschränkungen kombiniert

Java-Generika ermöglichen Entwicklern die Definition von Klassen und Methoden, die mit verschiedenen Datentypen arbeiten. Bei der Durchsetzung von Einschränkungen für die verwendbaren Typen kann es jedoch wünschenswert sein, mehrere Einschränkungen anzugeben, einschließlich der Klassen- und Schnittstellenvererbung. Dies wirft die Frage auf: Können wir einen generischen Typ definieren, der eine bestimmte Klasse erweitert und gleichzeitig eine bestimmte Schnittstelle implementiert?

Die Herausforderung, sowohl Klassen- als auch Schnittstellenbeschränkungen zu definieren

Stellen Sie sich das folgende Szenario vor: Wir möchten ein Klassenobjekt erstellen, das nur Klassen akzeptiert, die Klasse A erweitern und Schnittstelle B implementieren. Die separate Verwendung der folgenden generischen Deklarationen ist jedoch nicht möglich genügen:

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

Die Lösung: Begrenzte Typparameter kombinieren

Glücklicherweise bieten Java-Generika eine Möglichkeit, mehrere Einschränkungen mithilfe begrenzter Typparameter zu kombinieren. Um einen generischen Typ anzugeben, der sowohl Klasse A erweitert als auch Schnittstelle B implementiert, können wir die folgende Syntax verwenden:

<T extends ClassA & InterfaceB>
Nach dem Login kopieren

Diese Syntax gibt effektiv an, dass die generische Typvariable T sowohl die Klassen- als auch die Schnittstellenbeschränkungen erfüllen muss.

Bewahrung der Binärkompatibilität und komplexer Einschränkungen

Verwendung mehrerer Einschränkungen in Java-Generika ist eine leistungsstarke Technik, kann aber auch zu komplexen und herausfordernden Szenarien führen. Wie in den Java Generics FAQ hervorgehoben, erfordert die Wahrung der Binärkompatibilität manchmal komplizierte Designs wie die folgenden:

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

Praktische Implementierung mithilfe einer generischen Klasse

Obwohl dies nicht der Fall ist Da es möglich ist, eine Variable mit kombinierten Klassen- und Schnittstelleneinschränkungen direkt zu deklarieren, können wir dazu eine generische Klasse verwenden Wirkung:

class ClassB { }
interface InterfaceC { }

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

In diesem Beispiel erstellen wir eine generische Klasse MyClass, die die Variable auf Klassen beschränkt, die ClassB erweitern und InterfaceC implementieren.

Fazit

Durch die Kombination von Klassen- und Schnittstelleneinschränkungen in Java-Generika können Entwickler spezifische Anforderungen an die Typen erzwingen, die verwendet werden können. Durch die Verwendung begrenzter Typparameter können wir generische Klassen und Methoden erstellen, die mehrere Vererbungsbeschränkungen einhalten, was eine größere Flexibilität und Wartbarkeit des Codes ermöglicht.

Das obige ist der detaillierte Inhalt vonKönnen Java-Generika sowohl Klassen- als auch Schnittstellenbeschränkungen gleichzeitig erzwingen?. 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