如何在scala中分享案例类的行为
发布时间:2020-12-16 08:47:38 所属栏目:安全 来源:网络整理
导读:使用我得到的案例类在 scala中实现我的域模型 abstract class Entity { val _id: Option[BSONObjectID] val version: Option[BSONLong]} 以及几个定义不同实体的案例类 case class Person ( _id: Option[BSONObjectID],name: String,version: Option[BSONLon
使用我得到的案例类在
scala中实现我的域模型
abstract class Entity { val _id: Option[BSONObjectID] val version: Option[BSONLong] } 以及几个定义不同实体的案例类 case class Person ( _id: Option[BSONObjectID],name: String,version: Option[BSONLong] ) extends Entity 我需要的是一种方法来设置_id和版本以后从一个在Entity上运行的泛型方法,因为我必须在所有实体上共享这种行为,并希望避免写下数百次;-).我希望能够 def createID(entity: Entity): Entity = { entity.copy(_id = ...,version = ...) } …但当然这不会编译,因为实体没有复制方法.它是由编译器为每个单例类生成的…… 在scala中实现此目的的最佳方法是什么? 为了防止有人问:我必须使用案例类,因为这是第三方库从我获得的请求中提取给我的案例类实例是稍后序列化回BSON / MongoDB的… 解决方法
事实上,人们可以找到一种方法来实现这样的事情
Create common trait for all case classes supporting copy(id=newId) method 但由于我的用例非常复杂,我宁愿只创建两个新类 class MongoId(var id : BSONObjectID = null) { def generate = { id = BSONObjectID.generate } } class MongoVersion(var version: Long = 0) { def update = { version = System.currentTimeMillis } } 并实现了有关这些字段的共享行为.当然,您必须相应地更改基类的定义: abstract class Entity { def _id: MongoId def version: MongoVersion } 为了说清楚:只有当你想要在几个案例类中共享的行为只影响(在我的情况下更改)一个属性时,这才有效… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angularjs – 在使用BASE标记和HTML5Mode时,如何在Angular中
- anglejs – 角度ng-if和ng-show组合
- Bootstrap 环境安装
- bash – 详细地说,当您在终端中按Ctrl-C时会发生什么?
- anglejs – 角材料和聚合物有什么区别?
- bash – 如何在每行输入中找到唯一字符?
- AngularJS Transclusion Directive with ngRepeat导致混合范
- angular – Mat-table排序演示不工作
- scala spark-streaming整合kafka (spark 2.3 kafka 0.10)
- 完美解决bootstrap模态框允许拖动后拖出边界的问题