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] ___
2
Antworten

Erstellen eines Protokolls, das für ein- oder ausschaltbare Objekte steht

Ich versuche ein einfaches Protokoll zu erstellen, das besagt, ob ein Objekt in einem "An" -Zustand oder in einem "Aus" -Zustand ist. Die Interpretation dessen, was das ist, hängt von dem implementierenden Objekt ab. Bei einem UISwitch ist es...
19.08.2016, 23:29
2
Antworten

Scala: Wie man eine Fallklassenkopie erstellt, bewahrt manifestierte Informationen auf

Eine Fallklassen copy() -Methode soll eine identische Kopie der Instanz erstellen und alle Felder nach Namen ersetzen. Dies scheint fehlzuschlagen, wenn die Fallklasse Typparameter mit Manifesten enthält. Die Kopie verliert alle Kenntnisse üb...
11.08.2012, 22:02
2
Antworten

Java-Name-Überschneidungsfehler trotz unterschiedlicher Methodensignaturen

Aus Spaß versuche ich, eine "MultiMap" -Sammlung zu implementieren, wie sie bereits in der Apache Commons-Bibliothek existiert. Ich bekomme einen interessanten Fehler mit meiner Methode "remove (K key, V value)". Der Compiler sagt, dass es einen...
21.05.2014, 14:13
5
Antworten

Java: Wie kann diese generische Methode überschrieben werden?

%Vor% Wenn ich folgende Methode zum Überschreiben verwende %Vor% Ich bekomme folgenden Fehler: %Vor% Wie kann ich das lösen? Ich brauche die Methode nicht, um generisch zu sein, und eigentlich sollte es auch nicht sein. Was ich meine is...
24.10.2012, 12:40
3
Antworten

Java-Typ löschen vs. Feld # getGenericType und Methode # getGenericReturnType

Wie ich sie verstehe, sind Generika eine Kompilierzeitfunktion von Java, und im kompilierten Bytecode gibt es keine parametrisierten Typinformationen. Ich habe nun die Methoden getGenericType und getGenericReturnType entdeckt und damit meine Wel...
28.05.2009, 23:05
1
Antwort

Java 7, aber nicht Java 6: "ist nicht abstrakt und überschreibt nicht die abstrakte Methode"

Kann jemand erklären, warum dies in JDK 1.6 kompiliert wird, aber nicht in JDK 1.7, von dem ich die Fehlermeldung bekomme:    java: Beispiel ist nicht abstrakt und überschreibt nicht die abstrakte Methode compareTo (java.lang.Object) in java....
29.07.2013, 10:37
4
Antworten

Java - Erhalten eines generischen Objekts als String Generischer Typ löst Ausnahme aus

%Vor% Die Liste l enthält das Element vom Typ Box . In Fall 1 erhalte ich das erste Element als Box<Integer> und im zweiten Fall wird das zweite Element in der Liste als Box<String> erhalten. Die ClassCastException wird i...
26.03.2016, 08:46
2
Antworten

Generischer Rückgabetyp aus einer generischen Methode

Betrachten Sie eine generische Methodendefinition wie folgt: %Vor% Funktioniert perfekt, um einen beliebigen Objekttyp zu erhalten, bis Sie ein generisches Objekt wie List & lt; String & gt; versuchen. Der einzige Weg, wie ich es zum Laufen...
17.02.2015, 09:49
9
Antworten

Just-In-Time-Ableitung

Es gibt ein weniger gebräuchliches C ++ - Idiom, das ich in der Vergangenheit einige Male gut genutzt habe. Ich kann mich einfach nicht daran erinnern, ob es einen allgemein gebräuchlichen Namen hat, um es zu beschreiben. Es ist etwas verwand...
17.12.2009, 11:51
1
Antwort

Was ist der Vorteil des "hand-rolled" vtable Ansatzes?

Vor kurzem bin ich auf einige Arten von Lösch-Implementierungen gestoßen, die eine "handgerollte" vtable verwenden - Adobe ASL any_regular_t ist ein Beispiel, obwohl ich es auch in Boost ASIO gesehen habe (für die Warteschlange der Komplett...
02.11.2015, 19:47