Heim  >  Artikel  >  Java  >  Warum können wir „implements“ nicht für Typparametergrenzen in Java Generics verwenden?

Warum können wir „implements“ nicht für Typparametergrenzen in Java Generics verwenden?

DDD
DDDOriginal
2024-11-02 03:40:30946Durchsuche

Why Can't We Use

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!

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