Pergunta

Instead of using Scala Enumeration, I would like to represent my values with case classes as algebraic data type.

  sealed abstract class MeasureType
  case object Hour extends MeasureType
  case object Day extends MeasureType
  case object Week extends MeasureType
  case object Month extends MeasureType

I wonder, is it possible to create objects from a string, like with Enumeration:

MeasureType.withValue("Hour")
Foi útil?

Solução

You would need to create a singleton companion object MeasureType and write withValue method by hand using pattern matching on the argument.

object MeasureType {

    def withValue(val : String) : MeasureType = val match {
        case "Hour" => Hour
        case "Day" => Day
        case "Week" => Week
        case "Month" => Month
        case _ => throw new IllegalArgumentException("unrecognized name: " + val);
    } 
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top