vic
vic

Reputation: 2818

Scala Enumeration Data As String?

Is possible that an enumeration data type in Scala can be implemented as String as

enum Currency {CAD, EUR, USD }

in Java instead of

object Currency extends Enumeration {

  val CAD, EUR, USD = Value
}

which data value is binary?

I write a same functionality in both Java and Scala. The enumeration data is saved into database. The Java version works nicely with String value, but not the Scala version which is binary data.

Upvotes: 7

Views: 14730

Answers (3)

Yuval Itzchakov
Yuval Itzchakov

Reputation: 149538

You can do:

object Currency extends Enumeration {
  type Currency = String
  val CAD = "CAD"
  val EUR = "EUR"
  val USD = "USD"
}

And then the underlying type of each is an actual String.

Upvotes: 10

Ricardo
Ricardo

Reputation: 4298

Alternative solution w/o use of Enumeration:

object Currency {
  val CAD = "CAD"
  val EUR = "EUR"
  val USD = "USD"
}

And then the underlying type of each is an actual String. Usage in the REPL:

scala> val currency = Currency.USD
currency: String = USD

Reasoning: using extends Enumeration and type Currency = String as in the most voted answer apparently have no real benefit and could lead to unexpected results; on the given example, if we called Currency.values we would get an empty set. See the Enumeration API.

See also: https://www.baeldung.com/scala/enumerations

Upvotes: 0

Eytan
Eytan

Reputation: 798

You can try using toString.

Currency.Cad.toString() == "Cad"
Currency.withName("Cad") == Currency.Cad

Also if you want a readable format of your choice you can choose your string

object Currency extends Enumeration {
    val CAD = Value("Canadian Dollar")
    val EUR, USD = Value
}

See this blog post for full info.

Upvotes: 6

Related Questions