考虑以下示例数据类:
[RemoteClass]
public class SOTestData {
public var i:int;
public function SOTestData(i:int) {
this.i = i;
}
}
据我了解,RemoteClass 元数据标记应确保当此类的对象被重新初始化时,类型信息被保留。
我使用以下程序进行测试:
public class SOTest extends Sprite {
public function SOTest() {
var data:SharedObject = SharedObject.getLocal("SOTest");
if (data.data.object) {
try {
var stored:SOTestData = data.data.object;
trace(stored.i);
} finally {
data.clear();
}
}
else {
data.data.object = new SOTestData(15);
data.flush();
}
}
}
这里第一次运行写入数据,第二次读取并清除。运行这个,我仍然得到一个类转换错误。实际上,在 SharedObject 中没有存储类型信息。
我认为我没有错误地使用元数据,可能是编译器不知道如何处理它?我没有收到任何编译器错误/警告,尽管当我使用一些不存在的标签时它也不会抱怨。我正在使用带有 FlashDevelop 的 Flex 4.6 SDK 作为 IDE。
编辑:
下面是共享对象。如您所见,类型保存为“对象”而不是实际类型。
so = [object #2, class 'SharedObject'] {
data: [object #0, class 'Object'] {
object: [object #1, class 'Object', dynamic 'False', externalizable 'False'] {
i: 15,
},
}
}