Ich versuche, Array für einen ganz bestimmten Zweck zu verändern. Wenn ich folgendes habe:
%Vor%Warum kann ich das nicht tun?
%Vor%trotz der Tatsache, dass ich das tun kann
%Vor%Der Fehler, den ich erhalte, ist folgender:
Implicit coercion of a value with static type Array to a possibly unrelated type
Anstatt Array zu erweitern, könnten Sie Ihre eigene Klasse schreiben, die alle Methoden von Array verfügbar macht. Durch die Verwendung der Proxy-Klasse können Sie alle Standard-Array-Methoden auf ein internes Array umleiten, haben aber dennoch die Flexibilität, eigene Methoden hinzuzufügen:
%Vor%Beispiel:
%Vor%[] erstellt nur ein Array. Es kann nicht verwendet werden, um eine Unterklasse von Array zu erstellen.
Der beste Weg, Array mit neuen Funktionen zu erweitern, ist das Schreiben von Standalone-Funktionen, die reguläre Arrays manipulieren. Das Beste von allem ist, dass Sie alles mit jedem Array machen können und nicht nur auf Arrays beschränkt sind, die mit Ihrer Unterklasse erstellt wurden.
Hier ist ein einfaches Beispiel für eine Klasse, die Dienstprogrammfunktionen für Arrays enthält:
%Vor%Verwendung:
%Vor% [1,2,3]
ist Kurzschrift (oder syntaktischer Zucker) für new Array(1,2,3)
. In diesem Sinne scheint es mehr offensichtlich, warum Ihr Code fehlschlägt.
Jedes TileArray
ist ein Array
, da TileArray
erweitert Array
ist, aber die Umkehrung ist nicht wahr: Nicht jedes Array
ist ein TileArray
. Sie können also kein Array
übergeben, wenn ein TileArray
erwartet wird. Deshalb erhalten Sie den Compilerfehler.
Casting verzögert den Fehler nur von der Kompilierzeit zur Laufzeit, da der tatsächliche Typ Ihres Objekts Array
ist, was tatsächlich nicht mit TileArray
zusammenhängt.
Wenn Sie die Array
-Funktionalität erweitern möchten (und auch etwas syntaktischen Zucker hinzufügen können), sollten Sie vielleicht versuchen, Proxy
zu erweitern, wie es bereits vorgeschlagen wurde. Denken Sie daran, es ist weniger leistungsfähig, also wenn Sie diese Klasse stark verwenden möchten, ist dies möglicherweise nicht die beste Idee.
Tags und Links arrays actionscript-3 flex extends mxmlc