Warum ist „erweitert T“ zulässig, aber nicht „implementiert T“ in Typparametergrenzen?
In Java beim Definieren von Grenzen für den Typ Parameter können Sie „erweitert T“ verwenden, aber nicht „implementiert T“. Dies mag wie eine willkürliche Unterscheidung erscheinen, hat aber einen bestimmten Grund, der in der Java-Generika-Implementierung liegt.
Der Grund für diesen Unterschied liegt in der Semantik von Vererbung und Implementierung. In Java kann eine Klasse nur eine Schnittstelle implementieren, aber mehrere Klassen erweitern. Daher ermöglicht die Verwendung von „extends“ in Typparametergrenzen mehr Flexibilität bei der Angabe der zulässigen Typen.
Beispiel:
Bedenken Sie den folgenden Code:
<code class="java">public interface C {} public class A<B extends C> {}</code>
Wenn wir „Implementierungen“ in Typparametergrenzen zulassen würden, wäre dieser Code gültig. Allerdings würde sich die Frage stellen, welche Schnittstelle die Klasse B implementieren soll. Da mehrere Schnittstellen in diesem Zusammenhang nicht unterstützt werden, würde dies zu Mehrdeutigkeiten führen.
Andererseits stellt die Verwendung von „extends“ in der Grenze sicher, dass die Klasse B ein Untertyp der Schnittstelle C sein muss. Dies ist der Fall eine allgemeinere Einschränkung, die keine Mehrdeutigkeit mit sich bringt.
Durch die Einschränkung der Verwendung von „extends“ in Typparametergrenzen für Schnittstellen stellt Java daher die Konsistenz und Klarheit seiner generischen Implementierung sicher.
Das obige ist der detaillierte Inhalt vonWarum ist „erweitert T“ zulässig, aber nicht „implementiert T“ in Typparametergrenzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!