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

标签 scala scala-2.10

我想改进以下与 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/

相关文章:

scala - 在 scala 的字符串插值中循环

Scala 反序列化 : class not found

sbt - 在 sbt 项目中编译 Scala 2.10-RC3 宏

Scala 未绑定(bind)占位符参数

java - Apache Kafka Java 类?

java - 如何在运行时从 java 程序编译并运行 scala 代码?

scala - 如何将 Array[String] 转换为 Set[String]?

scala - Scala中如何匹配枚举?

java - 如何使用 apache poi XSSF 获取 xlsx 文件的文件名?

scala - 如何询问 Scala 是否存在所有类型参数实例化的证据?