2016-07-25 1 views
0

J'ai une énumération de chaîne provenant du résultat d'une requête dans une base de données. En d'autres termes, j'interroge un événement d'une base de données, et l'un des attributs est la description d'événement, qui doit toujours appartenir à un ensemble de chaînes bien connues. Par exemple.Comment modéliser Global Constant dans Scala en utilisant Enum?

  1. "PreferedLabelAdded"
  2. "PreferedLabelChanged"

Et ainsi de suite.

Je voudrais modéliser la chaîne possible qui provient de la base de données dans Scala. Je pensais utiliser un Enum mais je ne vois pas comment avec ce que j'ai vu en ligne. En fin de compte, ce que je voudrais faire est de comparer la valeur de l'attribut à l'une de cette valeur pour effectuer certaines tâches en fonction du type de descriptions d'événements.

Alghough je pourrais aller simplement entrer dans ma chaîne magique en tant que telle

if (eventDesc == "PreferedLabelAdded") 

Je trouve mal, parce qu'on n'obtient pas un point de contact pour changer les cordes, mais il se propagent partout dans le code.

Peut-être en utilisant simplement un objet en tant que tel

Object EventDesc { 

val PrefAdded = "PreferedLabelAdded"" 
val PrefChanged = "...." 

} 

Si quelqu'un a une suggestion particulière à cela, ce serait génial.

Daniel

Répondre

1

Vous pouvez étendre la classe scala.Enumeration pour créer votre énumération:

object EventDesc extends Enumeration { 
    type EventDesc = Value 
    val PreferedLabelAdded, PreferedLabelChanged, UNKNOWN = Value 
} 

val eventDesc = EventDesc.withName("PreferedLabelAdded") 

if (eventDesc == EventDesc.PreferedLabelChanged) { 
    Console.println(eventDesc) 
} 

Vous pouvez également faire des filtrages:

eventDesc match { 
    case PreferedLabelAdded | PreferedLabelChanged  => handleEvent(context) 
    case UNKNOWN     => ignoreEvent(context) 
    case _       => // noop 
}