Warum wird diese Ausnahme nicht ausgelöst, wenn ich die get() Methode() verwende?
Es gibt zwei Gründe dafür:
- Unter der Annahme, dass keine Elemente zu
array
in Ihrem Programm hinzugefügt wurden, die array
wird mit sz
Anzahl der null
Werte initialisiert werden .. Die Aussage (T)array[index]
ist versuchen, eine null
in eine T
zu werfen (wobei T
im Wesentlichen durch Object
durch Typ löschen ersetzt wird). Ein null
kann in einen beliebigen Typ umgewandelt werden, daher ist dies kein Problem.
- Unter der Annahme, dass einige Elemente zu
array
in Ihrem Programm hinzugefügt werden, ist die einzige Art und Weise, dass die Aussage (T)array[index]
ohne Probleme funktionieren wird, wenn das Element an Position index
ist vom gleichen Typ oder einem gebrauchten Subtyp Array
(zB Array<Number> arr = new Array<Number>
zum Instanziieren und arr[index]
ist 1. Dies wird kein Problem sein, aber versuchen, ein String
bei arr[index]
Einfügen, und Sie sind auch)
Warum die Compiler sagen, dass (ein ClassCastException
aus dem get
Methode erhalten gebunden T []) Array ist deaktiviert, und dann Klasse CastException wird ausgelöst, wenn ich die rep verwenden()
Der einzige Weg für Sie eine ClassCastException
zu bekommen, ist, dass die von T
vertreten Typ ist nicht das gleiche wie die Art der Elemente, die array
halten kann. Zum Beispiel, etwas zu tun, wie folgt in einem ClassCastException
führen:
Array<Integer> a = new Array<Integer>();
Integer[] intArray = a.rep();//ClassCastException
Hier T[]
stellt ein Integer[]
so gibt es keine Probleme in den Code kompilieren; Zur Laufzeit ist array
jedoch vom Typ Object[]
. Ein Array von Object
kann nicht auf ein Array von Integer
reduziert werden. Es wäre auch hilfreich zu wissen, dass Arrays im Gegensatz zu anderen Klassen von der JVM dynamisch erstellt werden.
Eine Möglichkeit, dies zu beheben, wäre die Instanziierung Array
als Array<Object> arr = new Array<Object>
.
Ihr Problem hat nichts mit den Generika zu tun. Das kann für Sie interessant sein: [hier] (http://stackoverflow.com/a/13647072/5333936) – Blobonat
Kurze Antwort: Sie können aufgrund eines Löschvorgangs nicht auf einen generischen Typ umwandeln. Verwenden Sie 'List' anstelle von 'Object []'. –
VGR