2013-04-04 165 views
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似乎很好地工作?有沒有一種解決方法?此

回答

0

啊,我意識到,KeySerializer是不正確的這種情況下,我需要設置ColumnSerializer:

implicit val CF_PAST = ColumnFamily.newColumnFamily(CF, StringSerializer.get, LongSerializer.get)