我从ByteArray
反序列化时发现了一个奇怪的错误,其中Vector
s不能包含扩展Array
的类型:反序列化时会出现TypeError。
TypeError: Error #1034: Type Coercion failed: cannot convert []@4b8c42e1 to com.myapp.ArraySubclass.
at flash.utils::ByteArray/readObject()
at com.myapp::MyApplication()[/Users/aaaidan/MyApp/com/myapp/MyApplication.as:99]
以下是:
public class Application extends Sprite {
public function Application() {
// register the custom class
registerClassAlias("MyArraySubclass", MyArraySubclass);
// write a vector containing an array subclass to a byte array
var vec:Vector.<MyArraySubclass> = new Vector.<MyArraySubclass>();
var arraySubclass:MyArraySubclass = new MyArraySubclass();
arraySubclass.customProperty = "foo";
vec.push(arraySubclass);
var ba:ByteArray = new ByteArray();
ba.writeObject(arraySubclass);
ba.position = 0;
// read it back
var arraySubclass2:MyArraySubclass = ba.readObject() as MyArraySubclass; // throws TypeError
}
}
public class MyArraySubclass extends Array {
public var customProperty:String = "default";
}
这是一个非常具体的案例,但对我来说似乎很奇怪。任何人都有任何想法导致它,或如何解决它?
答案 0 :(得分:2)
实际上,您发布的代码不会引发错误,因为ba.readObject() as MyArraySubclass
只是null
。 MyArraySubclass(ba.readObject())
但是会。
你可以尝试修复它,将是实现IExternalizable
,尽管我不确定它会更好。
我想问题是Array
在ActionScript中是一个非常特殊的类(在某种意义上它只不过是任何其他动态类,但在其他方面它根本不是)导致VM中有很多Array
特定代码。另外,问题是,为什么需要继承Array
?