gpt4 book ai didi

scala - 比较字符串和枚举

转载 作者:行者123 更新时间:2023-12-04 02:39:16 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com