読者です 読者をやめる 読者になる 読者になる

Flexをいじっていて、CanvasコンポーネントにSpriteをaddChildしようとしたところ、
以下のような例外が出て怒られてしまいます。

TypeError: Error #1034: 強制型変換に失敗しました。controls::Bezier@8a9c381 を mx.core.IUIComponent に変換できません。

DisplayObjectを継承したSpriteをCanvasにaddChildできそうな気がついしてしまいます。
*1
[http://livedocs.adobe.com/flex/2_jp/langref/mx/core/Container.html#addChild():title=
Canvasクラス(というか、Container以下のクラス)のaddChildメソッド]には以下のようなメモがついています。

メモ :メソッドに対する child 引数は DisplayObject 型として指定されますが、この引数がコンテナの子として追加されるには、IUIComponent インターフェイスを実装する必要があります。すべての Flex コンポーネントがこのインターフェイスを実装します。

IUIComponentには、UIComopnentとしてクラスを扱うためのメソッドやプロパティがまとめられています。
ContainerでaddChildなどのメソッドは一度オーバーライドされており、実質UIComponentクラスを対象としたものになっているというわけです。

Canvasクラスに対してSpriteをaddChildしようとした場合、以下のコードのようにAdapterパターンっぽく
Spriteを一旦UIComponentクラスにaddChildして、その後でこのUIComponentをCanvasにaddChildすればよいようです。

package
{
import flash.display.Sprite;
import mx.core.UIComponent;

public class mySprite extends UIComponent
{
private var sprite:Sprite;

public function mySprite()
{
super();

sprite = new Sprite();
}

override protected function createChildren():void
{
super.createChildren();

this.addChild(sprite);
}
.....
}
}

このエントリを書くに当たって、こちらのサイト(日本語訳エンジンを通して)参考にさせていただきました。
ありがとうございました。감사합니다!
「영원의 헤아림」[FLEX] 왜 Sprite는 Canvas에 addChild 안되는 걸까?
http://warkyman.tistory.com/tag/UIComponent

日本語訳
http://j2k.naver.com/j2k.php/japanese/warkyman.tistory.com/tag/UIComponent

*1:Canvas → Container → UIComponent → FlexSprite → Sprite → DisplayObjectContainer → InteractiveObject → DisplayObject → EventDispatcher → Object