Heim  >  Artikel  >  Java  >  Objekt, T (Generika) und ihre Unterschiede in Java

Objekt, T (Generika) und ihre Unterschiede in Java

怪我咯
怪我咯Original
2017-06-30 10:40:411376Durchsuche

Der folgende Editor bringt Ihnen einen Artikel, der die Unterschiede zwischen Object, T (Generika) und ? in Java bespricht. Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Herausgeber, um einen Blick darauf zu werfen

Da ich kürzlich Generika erneut gelesen und einige Überlegungen gelesen habe, habe ich Zweifel an Objekt, T (im Folgenden als Generika bezeichnet) und?.

Versuchen wir zunächst, die Object-Klasse zu verstehen. Jeder, der Java studiert, sollte wissen, dass Object die übergeordnete Klasse aller Klassen ist Das Sortiment ist sehr groß! Denken Sie zunächst daran: Wenn Ihr Parametertyp „Objekt“ ist, ist der Parametertyp sehr breit! „Thinking in Java“ sagte, dass viele Gründe zur Entstehung von Generika beigetragen haben, und einer der auffälligsten Gründe ist die Erstellung von Containerklassen. Wie ist das zu verstehen? Nach meinem Verständnis können Sie dies beiseite legen, um Containerklassen zu erstellen, und zum Zweck von Generika zurückkehren, um einen bestimmten Typ einzuschränken.

So können wir nun die beiden wichtigen Unterschiede zwischen Object und T zusammenfassen: Object hat einen sehr großen Bereich, während T bei eins beginnt Dieser Typ wird von Anfang an qualifiziert (einschließlich der Möglichkeit, ihn auf den Typ Object zu beschränken).

Das Objekt erzwingt die

Typkonvertierung

, da es die übergeordnete Klasse aller Klassen ist und T von Anfang an beim Codieren bestimmte Spezifitätstypen begrenzt hat (beachten Sie, dass beim Schreiben von Code dies der Fall ist). Es ist kein Casting erforderlich. (Der Grund, warum wir beim Schreiben von Code Wert darauf legen sollten, liegt darin, dass Generika von der JVM in der virtuellen Maschine gelöscht werden. Die spezifischen Typinformationen können auf Generika verwiesen werden, die hier nicht erweitert werden.) Zum Beispiel ist die List-Klasse in JDK eine generische Klasse. Jetzt geben wir an, dass es sich um einen Objekttyp handelt.

Liste selbst ist eine generische Klasse. Jetzt geben wir an, dass sie Parameter vom Typ Objekt empfängt. Zu diesem Zeitpunkt können Sie jede Art von Parametern einfügen, und wenn Sie sie herausnehmen, müssen Sie dies tun Führen Sie eine erzwungene Typkonvertierung in einen bestimmten Typ durch.
List<Object> list = new ArrayList<Object>();
int i = 0;
String s = "s";
list.add(i);
list.add(s);

Wenn wir nun die Liste zum Empfangen von String-Typ-Parametern angeben, kann diese Liste nur im String-Typ platziert werden und beim Herausnehmen ist keine Konvertierung des Umwandlungstyps erforderlich.

Die Inspiration, die uns das bringt, ist, dass wir beim Schreiben einer Klasse wie List darauf achten müssen, ob wir Generika verwenden. Stellen Sie sicher, dass Sie allgemeinere Klassen schreiben und mehr diskutieren und mehr verstehen, da es sonst immer noch zu Verwechslungen kommen kann.

Gefolgt von ?, kann dies verwendet werden, wenn Reflektion verwendet werden muss, um den Klassentyp zu erhalten. Die Erklärung lautet: Empfangen eines unsicheren Typs, der ein wenig mit Object identisch ist. Meiner Meinung nach ist es dasselbe wie Object, wenn Sie nur „?“ verwenden, aber „?“ hat eine etwas „fortgeschrittenere“ Verwendung als Object, das heißt, es kann einen unsicheren Bereich eingrenzen und so etwas verwenden „?“

extends

Test“, was bedeutet, dass nur die geerbte -Klasse akzeptiert wird, die die Testklasse empfängt. Ist der Umfang kleiner als der von Object? Das Obige sind die Unterschiede zwischen Object, T und ?. Schreiben Sie noch ein paar Codezeilen, führen Sie weitere Experimente durch und diskutieren Sie mehr, und Sie werden wissen, wann und wo Sie es angemessen verwenden müssen.

Das obige ist der detaillierte Inhalt vonObjekt, T (Generika) und ihre Unterschiede in Java. 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