Reputation: 1540
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
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
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