type-erasure

___ answer31827900 ___

Liste ist selbst ein Typ. Es wird also keinen Unterschied geben, wenn Sie den Typ darin ändern.

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer31827868 ___

Vielleicht weil %code% ein unformatierter Typ ist und %code% nicht. Rohtypen sind möglicherweise sehr gefährlich, weil sie viele seltsame Nebenwirkungen haben können.

Ich werde eine Referenz veröffentlichen, sobald ich sie finden kann.

    
___ tag123generics ___ Generika sind eine Form von parametrischer Polymorphie, die in einer Reihe von Sprachen gefunden wird, einschließlich .NET-Sprachen, Java und Swift. ___ tag123typeasurase ___ In Java ist das Löschen der Prozess, bei dem der Compiler alle Informationen zu Typparametern und Typargumenten innerhalb einer Klasse oder Methode entfernt, wenn ein generischer Typ instanziiert wird. In C ++ bezieht sich das Löschen auf eine Technik zum Verbergen einiger oder aller Typinformationen bezüglich einer Klasse. ___ tag123collections ___ Auflistungs-APIs stellen Entwicklern eine Reihe von Klassen und Schnittstellen zur Verfügung, mit denen die Sammlung von Objekten vereinfacht wird. ___ answer31827912 ___

" %code% ist kein verifizierbarer Typ" ist nicht der beste Weg zu formulieren, warum %code% nicht kompiliert wird.

Der Operator %code% überprüft den Typ Ihres Objekts zur Laufzeit.

Daher verhindert type-Löschung , dass Java seinen parametrisierten Typ (den Typ) nicht kennt zwischen dem %code% ).

Ein roher %code% (entspricht einem %code% ) oder ein %code% (dh ein %code% eines unbekannten Typs) bedeutet also hier praktisch dasselbe, obwohl normalerweise von der rohen Syntax abgeraten wird (hier für kosmetische Gründe).

    
___ qstntxt ___

Ich weiß, dass wir %code% nicht aufrufen können, weil %code% kein umformbarer Typ ist. Sowohl %code% als auch %code% arbeiten; Allerdings schlägt die Eclipse-IDE vor, %code% zu verwenden.

Ich frage mich, warum es ungebundene Wildcard %code% anstelle von roher Aufruf %code% vorschlägt. Hat der ungebundene Platzhalter %code% einen Vorteil gegenüber dem rohen Aufruf %code% ?

Vielen Dank im Voraus.

Edit 1 : %code% und %code% sind identisch mit dem Compiler, der den Typ beim Kompilieren löscht. Aber neben dem kosmetischen Grund, wie Mena darauf hinweist, hat es einen anderen Grund, %code% zugunsten von %code% zu benutzen?

2 bearbeiten : Nach diesem Eintrag von Oracle:

  
  1. Der Typ eines instanceof / cast-Ausdrucks ist roh
  2.   

Dies passiert sehr häufig, da javac instanceof Ausdrücke verbietet   wessen Zieltyp ein generischer Typ ist; Für Umwandlungen ist der Compiler   etwas permissiver, da Abgüsse zum generischen Typ erlaubt sind, aber a   Warnung wird ausgegeben (siehe oben). Wie auch immer, der rohe Typ sollte ersetzt werden   durch eine unbegrenzte Wildcard, da sie ähnliche Eigenschaften w.r.t.   Subtyping.

     

%code%   %Code%    %code%

Somit können wir folgern, dass neben dem kosmetischen Grund, wie Mena sagte, und der Beschränkung, Genetik zu verwenden, %code% und %code% gleich sind.

    
___ tag123erasure ___ Bei der Implementierung von Generics in einer Programmiersprache enthält die Binärdatei häufig keine der Typinformationen aus den Generika. Dies wird als "Löschen" bezeichnet. ___ qstnhdr ___ Der Unterschied zwischen instanceof List und instanceof List? [Duplikat] ___
3
Antworten

Scala unerklärliches Programmverhalten

Für den folgenden Code: %Vor% val a wird ohne Ausnahme berechnet und die Konsole druckt 1: two , aber wenn val b berechnet wird, wird java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer geworfen....
30.10.2017, 16:58
3
Antworten

Der Unterschied zwischen instanceof List und instanceof List? [Duplikat]

Ich weiß, dass wir instanceof List<E> nicht aufrufen können, weil List<E> kein umformbarer Typ ist. Sowohl instanceof List als auch instanceof List<?> arbeiten; Allerdings schlägt die Eclipse-IDE vor, instanceof...
05.08.2015, 08:51