私は次のことをしようとしていますが、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)
これは、文字列ではない KeySerializers を使用する Scala でのみ発生するようです。これに対する回避策はありますか?