scala - 比较字符串和枚举

标签 scala

我在 Scala 中有一个枚举映射到 JPA 中的字符串。为了更舒适的编码,我定义了它们之间的隐式转换。所以我现在可以定义值 val person.role = "User" , - person.role是枚举类型 "User"一个字符串,所以有转换。但是当我尝试比较这两者时,我总是得到错误,因为 def equals (arg0: Any) : Boolean需要 Any所以没有触发任何转换。我需要一些显式转换,但我的计划是能够省略它,您认为最佳实践是什么?这里最好的解决方案?

最佳答案

Value("User")在您的 Enumeration类型为 Val .我相信它是 equals 的实现不比较值的字符串名称。我认为这样做的一种严厉方式是创建自己的 EnumerationVal以便在名称匹配时返回 true。

但是在我的代码使用中,而不是使用 JPA,我总是将字符串转换为 MyEnumeration.Value .这很容易,例如:

 object E extends Enumeration { val User = Value("User") }

 scala> val a = E.withName("User")
 a: E.Value = User

注意使用 withName 时, 如果字符串与枚举中的任何名称都不匹配,则会出现异常。

然后始终在比较中使用枚举字段:
scala> a == E.User
res9: Boolean = true

如果 JPA 只返回一个字符串,并且没有办法绕过它。然后我认为最好的选择是将值转换为字符串并将字符串匹配到字符串,或者将字符串升级为 Val 并比较 Val。混合这些类型将无法进行比较,除非您对 equals 实现某种扩展。方法,这很棘手。

关于scala - 比较字符串和枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3407032/

相关文章:

scala - Future的onComplete和flatMap有什么区别?

scala - 函数式语言(Erlang、F#、Haskell、Scala)

scala - Catch 的返回值

scala - 使用 Scala 从 Stream 构建树

Scala - 初始化 REPL 环境

scala - 为什么我需要在这个 Scala 表达式中的这个空函数上加上括号?

scala - 如何在 sbt 中定义 Maven test-jar 依赖项

scala - 将 Akka 库添加到 Intellij 项目

generics - 如何获取泛型类型的实际类型?

java - Java 和 Scala 协同工作的效果如何?