2
我想要做以下,但由於某種原因,我的代碼將不會編譯由於從KeySerializer的類型不匹配。類型不匹配在斯卡拉Astyanax KeySerializer
implicit val keyspace = ConnectionPool.bigdataKeyspace
implicit val CF_PAST = ColumnFamily.newColumnFamily(CF, LongSerializer.get, StringSerializer.get)
def update(model: M) = {
val batch = keyspace.prepareMutationBatch().setConsistencyLevel(ConnectionPool.CL_WRITE)
val rk = model.rowkey
try {
batch.withRow(CF_PAST, rk)
.putColumnIfNotNull(model.epoch, model.value, model.ttl)
batch.execute
Option(model)
} catch {
case e: Exception =>
logger.warn("Unable to insert past model", e)
None
}
}
的編譯錯誤如下」
error: type mismatch; found
: com.netflix.astyanax.model.ColumnFamily[Long,String] required: com.netflix.astyanax.model.ColumnFamily[Comparable[_ >:
String with Long <: Comparable[_ >: String with Long <:
Comparable[_ >: String with Long <:
java.io.Serializable] with java.io.Serializable] with java.io.Serializable] with java.io.Serializable,String] Note:
Long <: Comparable[_ >: String with Long <: Comparable[_ >:
String with Long <: Comparable[_ >: String with Long <:
java.io.Serializable] with java.io.Serializable] with java.io.Serializable] with java.io.Serializable, but Java-defined class ColumnFamily is invariant in type K.
You may wish to investigate a wildcard type such as `_ <:
Comparable[_ >: String with Long <: Comparable[_ >:
String with Long <: Comparable[_ >: String with Long <: java.io.Serializable] with
java.io.Serializable] with java.io.Serializable] with java.io.Serializable`.
(SLS 3.2.10)
batch.withRow(CF_PAST, rk)
這似乎只在斯卡拉發生與不是一個字符串,ColumnSerializers其他類型KeySerializers似乎很好地工作?有沒有一種解決方法?此