gpt4 book ai didi

oop - Scala:带选项的构造函数方法

转载 作者:行者123 更新时间:2023-12-04 20:55:17 24 4
gpt4 key购买 nike

出于不相关的原因避免使用通常的 ORM,我正在尝试编写一个类,该类既可以显示来自 DB 的数据,也可以向其中添加/更新数据(这首先是个好主意吗?)。

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 和名称,创建一个表示它的对象,
  • 只知道记录的 id,您可以从 DB 和
  • 构造 rep 对象
  • 如果您不提供 id,您的对象将处于未同步状态,并将在添加/更新发生后同步。

  • 问题是,第一个构造函数依赖于数据库操作,因此 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

    关于oop - Scala:带选项的构造函数方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7696287/

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