我很擅长弯曲,最近遇到了障碍。
这是我正在运行的代码。
/**
* return background definition depending on time
*/
private function findBackgroundItem( relativeTime : Number ) : CSBackgroundItem
{
if( this.backgroundItems == null ) return null;
var result :CSBackgroundItem = null;
var relative:Date = new Date(relativeTime);
for( var i : Number = 0; i < this.backgroundItems.length; i++ )
{
// backgroundItems is an Ilist of CSBackgroundItem.
var colourItem : CSBackgroundItem = CSBackgroundItem( this.backgroundItems.getItemAt( i ) );
// other stuff here
}
return result;
}
当IList.getItemsAt()结果强制转换为CSBackgroundItem变量colourItem时,会出现问题。抛出以下错误
TypeError: Error #1034: Type Coercion failed: cannot convert com.mystuff::CSBackgroundItem@650e8dd1 to com.mystuff.CSBackgroundItem.
如果我使用'as'
关键字,我会在colourItem
为空的情况下获得投射结果。使用调试器显示列表不为空,并且确实填充了CSBackgroundItem
个对象。
现在这是古怪的一点..这段代码有效,第一次加载模块..后续加载(卸载后)抛出异常。
任何人都可以解释为什么会发生这种情况吗?
答案 0 :(得分:1)
我想我可能找到了答案..
我的猜测是模块正在加载一个不同的ApplicationDomain ..这意味着你不能在当前域中使用相同的类型进行转换..
据我所知,这与加载同一类的不同Java ClassLoader模糊相似。
我确认后会再次发帖
答案 1 :(得分:1)
是的......有效..
这是MXML样式中使用的修复程序..
<mx:ModuleLoader id="loader" x="10" y="10" width="100%" height="100%" applicationDomain="{ApplicationDomain.currentDomain}"/>
等效的动作脚本将是
loader.applicationDomain = ApplicationDomain.currentDomain;
答案 2 :(得分:1)
仅供参考,加载到子ApplicationDomain中的类型可以强制转换为父ApplicationDomain中的类型(它扩展/实现)。
例如
loader.applicationDomain = ApplicationDomain.currentDomain; // parent domain
loader.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); // child domain
loader.applicationDomain = new ApplicationDomain(); // new domain