ActionScript调用本地JSON类静态方法失败问题求助
搞定ActionScript里同名静态类方法的调用难题
嘿,我懂你遇到的麻烦——在C#里直接用完整路径调用同名静态方法很顺畅,但到了ActionScript里就不管用了,还抛出了1061错误。别着急,这是因为AS的命名空间解析规则和C#不一样,咱们一步步解决:
问题出在哪?
你现在的代码里,编译器默认会把JSON指向Flash Player内置的那个JSON类,而不是你自己写的mypackage.subpackage.JSON。就算你想直接写完整路径调用,AS也不认.的写法,得用它专属的语法才行。
两种靠谱的解决办法
办法一:给自定义类起别名(推荐)
直接在导入的时候给你的自定义JSON类起个不一样的名字,彻底避免冲突,代码写起来也清爽:
import flash.utils.ByteArray; import mypackage.subpackage.JSON as CustomJSON; // 给自定义类加别名 public class Package extends ByteArray { public function writeJsonObject(param1:Object) : void { this.writeUTF(CustomJSON.encode(param1)); // 用别名调用就不会错啦 } }
办法二:用完全限定类名调用
如果你不想加别名,那就用AS特有的命名空间分隔符::来指定完整路径,这样编译器就能精准找到你要的类:
import flash.utils.ByteArray; public class Package extends ByteArray { public function writeJsonObject(param1:Object) : void { // 注意这里用::代替.来分隔命名空间和类 this.writeUTF(mypackage.subpackage::JSON.encode(param1)); } }
额外检查点
别忘了确认你自己的JSON类里的encode方法是public static的哦,要是方法权限不对或者没加static,编译器照样会说找不到方法:
package mypackage.subpackage { public class JSON { // 必须是public static才能被外部静态调用 public static function encode(obj:Object):String { // 你的编码逻辑 } } }
为啥C#的写法在AS里不行?
简单说就是语法规则差异:C#用.来串联命名空间和类,但AS里.主要用来访问对象的属性/方法,命名空间和类之间得用::来分隔,这才是AS识别完整类路径的正确方式。
内容的提问来源于stack exchange,提问作者Ronald Master
相关产品推荐
相关产品推荐

