2011-10-20 2 views
0

Si j'ai l'objet scala suivant:réflexion Scala sur l'objet

object CustomerState { 
    val PENDING = "pending" 
    val TRIAL = "trial" 
    val PAYING = "paying" 
    val DEACTIVATED_TRIAL = "deactivated_trial" 
    val DEACTIVATED_PAYING = "deactivated_paying" 
} 

Comment puis-je obtenir une liste de toutes les valeurs de val? Dans ce cas, je suis à la recherche d'obtenir une liste de ("en attente", "procès", "payer", "deactivated_trial", "deactivated_paying")

Merci à l'avance, Todd

Répondre

3

En ce moment je pense que le mieux que vous pouvez faire est d'obtenir une liste de toutes les méthodes sans argument (puisque c'est ce que val s sont compilés à) et les appeler:

CustomerState.getClass.getMethods.toList.filter(_.getParameterTypes.isEmpty).map(_.invoke(CustomerState)) 

Il y aura une bibliothèque de réflexion spécifique à Scala en 2.10, ce qui améliorera les choses.

3

shouldn » t vous utilisez un Enumeration?

Exemple:

object Main extends Application { 

    object CustomerState extends Enumeration { 
    type CustomerState = Value 
    val Pending, Trial, Paying, Deactivated = Value 
    } 

    import CustomerState._ 

    CustomerState.values foreach println // Will print each value 
} 
+1

Je pensais que la sagesse dominante était que l'énumération Scala était une aberration mieux évitée. –

+0

Dans ce cas, cela fonctionne –

+1

Je suis sous la même impression sur l'utilisation de l'énumération dans scala –

Questions connexes