我想改进以下与Cassandra相关的Scala代码.我有两个不相关的用户定义类型,实际上是在Java源文件中(省略了细节).
public class Blob { .. }
public class Meta { .. }
Run Code Online (Sandbox Code Playgroud)
以下是我目前使用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
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但如何避免以下问题
Blob或)时重复MetasaveObject参数类型你绝对可以Mapper用作类型类,做:
def save[A](entity: A)(implicit mapper: Mapper[A]) = mapper.saveAsync(entity)
Run Code Online (Sandbox Code Playgroud)
现在,你必须能够在所有类型进行保存操作的通用方法,A针对其Mapper[A]在范围.
此外,mappingManager.mapper可能可能会改进实施以避免classOf,但很难从当前状态的问题中分辨出来.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |