2010-10-06 18 views
0

Comment puis-je lister tous les noms (et valeurs) de const (et private/protected) const définis dans une classe?Comment puis-je lister toutes les propriétés const définies dans une classe

public class Layers { 

    public const BACKGROUND:String = "background"; 
    public const PARENT:String = "parent"; 
    public const MAP:String = "map"; 
    public const LINES:String = "lines"; 
    public const POINTS:String = "points"; 
    public const WINDOWS:String = "windows"; 

    ... 

    public function isValidValue(type:String) { 
     // ...   
     // if type is a value of a constant return TRUE 
     // ... 
    } 

} 

Répondre

1

Lors de l'exécution, vous pouvez utiliser describeType() pour répertorier tous les vars publics (pas trop sûr de consts), et un ensemble beaucoup plus d'informations aussi.

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/utils/package.html#describeType()

Privates sont plus difficiles à obtenir.

Je ne sais pas si ce ne serait pas plus rapide pour créer un tableau des constantes puis utilisez Array.indexOf (type)

post-scriptum Je crois aussi qu'il existe une version JSON de describeType() maintenant, quelque part.

+0

woah! Un tableau est sûrement plus rapide! Mais en lisant la définition de la classe, je suis sûr que je n'oublie pas de mettre à jour les valeurs à deux endroits. Merci. – yuri

0

L'auto-complétion de FlashBuilder vous donnera toutes les constantes de votre classe et bien plus encore.

http://www.adobe.com/products/flashbuilder/

+0

Je ne suis pas du tout intéressé pour obtenir la liste alors que je vous écris! Runtime pour vérifier que j'ai passé une valeur compréhensible. – yuri

2

Cela fonctionne avec AS3 et Flex 4.5.1

public static function isValidValue(type:String):Boolean { 

     var m_constNameList:XMLList = describeType(Layers).descendants("constant"); 

     for each(var obj:Object in m_constNameList){ 
      if (type == Layers[[email protected]]){ 
       return true; 
      } 
     } 
     return false; 
    }