kagamihogeの日記

kagamihogeの日記です。

ActionScript で throw する値はなんでもいい

Java の場合、例外で送出するクラスは Throwable の子孫であるところの Error なり Exception のサブクラスを使用する。

一方 ActionScript では例外に使用するデータについて型の制限が存在しない。一応、Adobe 的には「Error のサブクラス使おうね」というガイドラインはあるものの、言語仕様的なしばりは存在していないようだ。超ビックリ。

なので例外で投げるデータは文字列でもおk

package exceptiontest
{
    import mx.controls.Alert;

    public class ExceptionHoge
    {
        public function hoge():void {
            try {
                this.throwException();
            } catch (e:String) {
                Alert.show("exception:=" + e.toString());
            }
        }
        
        public function throwException():void {
            throw "例外です";
        }
    }
}

また、任意のクラスのインスタンスを使用できる。無意味なコードではあるけど、下記のようなコードでも意図通り例外を catch できる。

package exceptiontest
{
    import mx.containers.Accordion;
    import mx.controls.Alert;
    
    public class ExceptionHoge
    {
        public function hoge():void {
            try {
                this.throwException();
            } catch (e:Accordion) {
                Alert.show("exception:=" + e.toString());
            }
        }
        
        public function throwException():void {
            throw new Accordion();
        }
    }
}