我有以下类,其中属性是 Option[T]
class User extends IdBaseEntity[UUID] { var id: Option[UUID] = None var name: Option[String] = None var createdOn: Option[Date] = None }
在某些数据访问层中,如果在将对象持久化到 cassandra 之前未设置这些属性,我需要分配这些属性。以下是 createdOn
属性的几种方法。这些是最好的方法还是我应该做的更好?
示例 1
entity.createdOn = Some(entity.createdOn.map(identity).getOrElse(new Date()))
示例 2
entity.createdOn = entity.createdOn.orElse(Some(new Date()))
示例 3
entity.createdOn = entity.createdOn match { case None => Some(new Date()) case _ => entity.createdOn }
示例 4
entity.createdOn = entity.createdOn match { case None => Some(new Date()) case Some(x) => Some(x) }
示例 5
entity.createdOn match { case None => entity.createdOn = Some(new Date()) case _ =>; }
最佳答案
Option
上的匹配并不是真正地道(恕我直言)。我更喜欢获取 orElse
或 getOrElse
。我个人会选择示例 2。
我不确定这是否适合您的用例,但使 User
成为不可变的案例类更为惯用:
case class User(id: Option[UUID] = None, ...)
并复制
它,而不是就地更新字段:
val updatedEntity = entity.copy(name = user.name.orElse(Some("Chris")))
关于scala - 没有初始化/无时,是否有最佳实践为 Scala 选项赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16310438/