gpt4 book ai didi

scala - 如果类型在 Scala 中不相关,如何编写高效的类型有界代码

转载 作者:行者123 更新时间:2023-12-01 23:17:45 25 4
gpt4 key购买 nike

我想改进以下与 Cassandra 相关的 Scala 代码。我有两个不相关的 user defined types它们实际上在 Java 源文件中(省略了细节)。

public class Blob { .. }
public class Meta { .. }

下面是我目前在 Scala 中使用它们的方式:

private val blobMapper: Mapper[Blob] = mappingManager.mapper(classOf[Blob])
private val metaMapper: Mapper[Meta] = mappingManager.mapper(classOf[Meta])

def save(entity: Object) = {
entity match {
case blob: Blob => blobMapper.saveAsync(blob)
case meta: Meta => metaMapper.saveAsync(meta)
case _ => // exception
}
}

虽然这可行,但您如何避免以下问题

  1. 在添加新的用户定义类型类(如 BlobMeta)时重复
  2. 添加save等新方法时的模式匹配重复
  3. Object作为参数类型

最佳答案

你绝对可以使用 Mapper 作为类型类,做:

def save[A](entity: A)(implicit mapper: Mapper[A]) = mapper.saveAsync(entity)

现在您有了一个通用方法,能够对 Mapper[A] 范围内的每个类型 A 执行保存操作。

此外,mappingManager.mapper 实现可能会得到改进以避免 classOf,但很难从当前状态的问题中分辨出来。

关于scala - 如果类型在 Scala 中不相关,如何编写高效的类型有界代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26657220/

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