Sergey Senkov
Sergey Senkov

Reputation: 1540

ActionScript get Class type, that is out of package?

Main.as

package{
    public class Main extends Sprite{
        public function Main () {
            new ProxyClass(new HiddenClass())
        }
    }
}

class HiddenClass(){
    ...
}

ProxyClass.as

package{
    public class ProxyClass extends Sprite{
        public function ProxyClass(value:*) {
            trace(value, value.constructor) // [object HiddenClass] [class HiddenClass]
            switch (value.constructor) {
                case Sprite:
                    ... 
                    break;
                case "class HiddenClass": //???????
                    ... 
                    break;
            }
        }
    }
}

I have some legacy code and cannot change Main.as. I need to check Class type of value inside my ProxyClass, but HiddenClass is out of package and is visible only for Main.as. How can I validate HiddenClass ?

Upvotes: 1

Views: 71

Answers (2)

Panzercrisis
Panzercrisis

Reputation: 4750

Use flash.utils.getQualifiedClassName. It's a global function that'll give you the package + class name. For example:

MyClass                          // default package
com.mycompany.mypackage::MyClass // package com.mycompany.mypackage

So essentially:

package{
    import flash.utils.getQualifiedClassName;

    public class ProxyClass extends Sprite{
        public function ProxyClass(value:*) {
            trace(value, value.constructor) // [object HiddenClass] [class HiddenClass]
            var strClass:String = getQualifiedClassName(value);
            switch (strClass) {
                case "flash.display::Sprite":
                    ... 
                    break;
                case "Main.as$9::ProxyClass":
                    ... 
                    break;
            }
        }
    }
}

Confirm each of these Strings are the right ones to be checking for, but when I experimented with a couple of my own classes (including a hidden one), it looked like these are the values you would be getting back.

Upvotes: 0

Fygo
Fygo

Reputation: 4665

Well, considering it is not a visible property and you will not get its definition, you will very probably have to rewrite your switch statement to use Strings instead of Object. Just cast the value.constructor to String and then use it as case "[class HiddenClass]".

Upvotes: 2

Related Questions