Reputation: 2818
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
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
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
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