oop – Scala:带选项的构造函数方法
发布时间:2020-12-16 10:07:34 所属栏目:安全 来源:网络整理
导读:出于非相关原因避免使用通常的ORM,我正在尝试编写一个既可以从数据库中显示数据又可以向其添加/更新数据的类(这首先是一个好主意?). class Car (val _id:ID,val _name:String = "") { def this(_id:ID) = { val car = DB.fetchCar(_id) this(_id,car.name)
出于非相关原因避免使用通常的ORM,我正在尝试编写一个既可以从数据库中显示数据又可以向其添加/更新数据的类(这首先是一个好主意?).
class Car (val _id:ID,val _name:String = "") { def this(_id:ID) = { val car = DB.fetchCar(_id) this(_id,car.name) } def this(_name:String) = this(null,_name) def isSynced:Boolean = { ... } def sync { ... } } 这意味着你可以: >知道记录的id和名称,创建一个表示它的对象, 问题是,第一个构造函数依赖于DB操作,因此Option [Car]作为返回类型更有意义.但据我所知,Scala不允许你做类似的事情: def this(_id:ID):Option[Car] = { try { val car = DB.fetchCar(_id) Some(this(_id,car.name)) } catch { case e:Exception => None } } 这有意义吗?你会如何实现这个? 解决方法
您可以从班级的伴侣对象中执行此操作:
class Car private (data: CarData) { ... } object Car { def apply(id: Int): Option[Car] = { DB.find(id) match { case Some(data) => Some(new Car(data)) case _ => None } } def apply(data: CarData): Car = { new Car(data) } } 这允许客户端代码 val someId: Int = ... val maybeCar = Car(someId) // Will be Option[Car] val someKnownData: CarData = ... val definitiveCar = Car(someKnownData) // Will be Car (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Shell基础知识
- Style of WebService: REST vs. SOAP
- ORA-00704: bootstrap process failure
- Angularjs – 如何从不依赖的另一个模块更正注入服务?
- angularjs – 如何`inject“$window`对象到`config`在角
- angular – 在添加新项目时保持列表中的滚动位置
- Bootstrap结合BootstrapTable的使用
- 在Scala中嵌套Seqs中是否存在一种简单的默认方式?
- shell 命令行参数(基本)
- create a deployment package for Webservice in Visual St