gpt4 book ai didi

scala - 在集合上应用重载的类型化方法

转载 作者:行者123 更新时间:2023-12-01 09:36:21 26 4
gpt4 key购买 nike

我是 Scala 的新手,正在努力解决以下问题:

我有数据库对象(BaseDoc 类型)和值对象(BaseVO 类型)。现在有多个转换方法(都称为“转换”),它们采用对象的实例并将其相应地转换为其他类型 - 如下所示:

def convert(doc: ClickDoc): ClickVO = ...
def convert(doc: PointDoc): PointVO = ...
def convert(doc: WindowDoc): WindowVO = ...

现在我有时需要转换对象列表。我该怎么做 - 我试过:

def convert[D <: BaseDoc, V <: BaseVO](docs: List[D]):List[V] = docs match {
case List() => List()
case xs => xs.map(doc => convert(doc))
}

这会导致“重载方法值转换为备选方案...”。我尝试向其中添加 list 信息,但无法正常工作。

我什至无法为每个方法创建一个方法,因为它会说它们在类型删除后具有相同的参数类型(列表)。

欢迎提出想法!

最佳答案

不要认为您需要方法上的通用参数。 List 在 Scala 中已经是协变的。您也不需要模式匹配 - map 会将空列表转换为自身。像这样的事情怎么样:

def convert(docs: List[BaseDoc]):List[BaseVO] = docs map {
case doc: ClickDoc => convert(doc)
case doc: PointDoc => convert(doc)
case doc: WindowDoc => convert(doc)
}

另一种选择是将 convert 方法移动到各种 BaseDoc 子类中,并允许以多态方式调用它。

关于scala - 在集合上应用重载的类型化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2965122/

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