Supertyp-Grenzunterschiede in Java-Generika
In Java ist Ihnen beim Definieren von Grenzen für Typparameter möglicherweise das Vorhandensein von „extends“ aufgefallen. aber nicht „implementiert“. Diese Ungleichheit hat die Neugier geweckt, zu verstehen, warum dies der Fall ist.
Warum nicht „implementiert T“?
Im Gegensatz zu „extends“, was auf eine Supertyp-Beziehung hinweist, bei der die Unterklasse teilt die gleiche Schnittstelle, „implementiert“ bezeichnet eine Implementierungsbeziehung, in der die Klasse die von der Schnittstelle angegebenen Methoden implementiert. Dieser Unterschied wird bei der Kompilierung deutlich.
Betrachten Sie das folgende Beispiel:
<code class="java">interface C {} class A<B extends C> {} // Allowed class A<B implements C> {} // Not allowed</code>
Im ersten Beispiel wird der Typparameter B durch die Klasse C mit „extends“ begrenzt. Dies ermöglicht, dass B entweder gleich oder eine Unterklasse von C ist. Im zweiten Beispiel wird „implements“ verwendet, was nur zulässt, dass B eine Schnittstelle ist, die C implementiert. Typparameter können jedoch keine implementierenden Schnittstellen angeben.
Grund für „erweitert T“
Die generische Einschränkungssprache von Java konzentriert sich auf Supertyp-Beziehungen. Mit „extends“ können Sie einen Typparameter auf eine bestimmte Superklasse oder Schnittstelle beschränken und so sicherstellen, dass der Typ immer diesem Supertyp zugewiesen werden kann. Dadurch bleiben Typsicherheits- und Vererbungsprinzipien in Java erhalten.
Andererseits passt „implementiert“ nicht zu diesem Paradigma, da es eine Implementierungsbeziehung und keine Supertypbeziehung definiert. Daher ist „extends“ die bevorzugte und einzige Option zum Definieren von Grenzen für Typparameter.
Das obige ist der detaillierte Inhalt vonWarum können wir „implements“ nicht für Typparametergrenzen in Java Generics verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!