gpt4 book ai didi

reflection - Scala 枚举和反射

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

在 Java 工作了很长时间后,我开始对 Scala 产生兴趣。
作为一个学习项目,我试图复制一个从数据库中存储和检索状态对象的 java 库。
为此,我希望能够像这样指定一个状态对象:

@PersistName("PERSON") case class  Person extends Entity {
@Persist var id:Long = -1
@Persist @MaxLength(80) var firstName = ""
@Persist @MaxLength(80) var lastName = ""
@Persist var gender = Gender.Male
@Persist @MaxLength(80) var userName = ""
@Persist @OptionClass(classOf[Date]) var birthDay:Option[Date] = None
}

序列化/反序列化 Person 实例的代码使用反射来了解字段的类型,并且适用于除性别字段之外的所有字段。
性别字段是一个枚举,定义为:
object Gender extends Enumeration {
type Gender = Value
val Male,Female,Unknown = Value
}

问题是我不知道如何使用反射也只使用 Person 类创建一个新的 Gender 值。

最佳答案

Scala 的 Enumeration 很有趣,但 case 类通常比它有优势:

sealed class Gender
case object Male extends Gender
case object Female extends Gender

这样做的好处是 match能够,如果您测试一种性别而不是另一种性别,Scala 甚至会提示。而且,它似乎更容易解决您的问题。 :-)

关于reflection - Scala 枚举和反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1213399/

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