There is no direct comparison between the case class and enumerations, or something really close to enums. But you can implement similar logic as follows:
case class Status(code: Int, name: String, descr: String) object Status { val OK = Status(1, "Ok", "Okay"), val NOT_OK = Status(5, "Not Ok", "Not Okay") val BAD = Status(10, "Bad", "Run for your life") }
Then, if you want, you can put it in some list with values:
import Status._ val values = List(OK, NOT_OK, BAD)
and then follow these steps:
values.foreach(doStuff)
The result will be the same as in the Java version.
If you need to perform different actions depending on the type of status, you can go with the template:
sealed trait Status case class OK(code: Int, name: String, descr: String) extends Status case class Not_Ok(code: Int, name: String, descr: String) extends Status case class Bad(code: Int, name: String, descr: String) extends Status
then in your function of using the doStuff template use, for example:
def doStuff(status: Status) = status match { case OK(c, n, d) => // some code.. // some code for other cases } val values = List(OK(1, "Ok", "Okay"), Not_Ok(5, "Not Ok", "Not Okay"), Bad(10, "Bad", "Run for your life")) value.foreach(doStuff)