我正在将数据写入新的ByteArray并将其存储到LocalStore
中var ba:ByteArray = new ByteArray;
ba.writeObject(theobject);
EncryptedLocalStore.setItem(MY_VAL_STORE, ba); //bytes in local store
作为一个实验,我试图将前两行变成一行,所以我正在使用这种语法(我基本上将新的ByteArray放在括号中并立即使用它)。
var ba:ByteArray = (new ByteArray).writeObject(theobject) as ByteArray;
EncryptedLocalStore.setItem(MY_VAL_STORE, ba); //bytes in local store
但这会让我的AIR应用程序在运行时崩溃。如果我回到2行,它工作正常。我意识到这不是什么大问题,但我很好奇为什么这种创造性的语法不起作用。有什么想法吗?
在<1>版本中 注意:,如果我不添加as ByteArray
,它会抱怨我正在尝试使用类型void和ByteArray。
答案 0 :(得分:8)
你自己回答了你的问题:
它抱怨我正在尝试使用ByteArray类型的void。
在您的声明中,您将writeObject()
的结果分配给ByteArray变量,而不是new ByteArray()
创建的实例。由于结果类型为void
,因此该赋值是非法的,会导致编译器抛出错误。然后,您已经向ByteArray添加了void
的手动转换,这显然足以欺骗编译器,但不会在运行时阻止类型转换错误。
简而言之:只有在新实例上调用的方法返回this
时,此类型的赋值才有效。顺便说一下,使代码更具可读性的有用方法,也称为Method Chaining的概念。
答案 1 :(得分:1)
查看writeObject调用的文档,我猜您的代码无效,因为该方法的返回值为void
,并且您尝试将其强制转换为ByteArray