scala - hector scala 类型不匹配

标签 scala hector

可能有什么问题?

val is = IntegerSerializer.get
mutator.addInsertion(deviceId, COLUMN_FAMILY_CARSTATUS, createColumn("mileage", 111, ss, is))}


ModelOperation.scala:96: error: type mismatch;
[INFO]  found   : me.prettyprint.cassandra.serializers.IntegerSerializer
[INFO]  required: me.prettyprint.hector.api.Serializer[Any]
[INFO] Note: java.lang.Integer <: Any (and me.prettyprint.cassandra.serializers.IntegerSerializer <: me.prettyprint.cassandra.serializers.AbstractSerializer[java.lang.Integer]), but Java-defined trait Serializer is invariant in type T.
[INFO] You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
[INFO]      mutator.addInsertion(deviceId, COLUMN_FAMILY_CARSTATUS, createColumn("mileage", 111, ss, is))}

最佳答案

错误是说 createColumn需要类型为 Serializer[Any] 的序列化程序,但您正在传递 Serializer[Integer] 类型之一.这仅适用于 Serializer在其类型参数中是协变的(即,定义为 Serializer[+T] )。但相反,Serializer来自 Java,其中协方差的工作方式不同。

型号Serializer[Integer]可以安全地转换到 Serializer[_ <: Any] ,所以 Scala 编译器建议可能是 createColumn应该编写为期望不太具体的通配符类型。

如果不能修改createColumn ,那么最后的手段就是使用“类型系统逃生舱门”asInstanceOf转换为预期类型:

val is = IntegerSerializer.get.asInstanceOf[Serializer[Any]] // defeats type system
mutator.addInsertion(... is ...)

关于scala - hector scala 类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7257805/

相关文章:

java - 运行 Java 给出 "Error: could not open ` C :\Program Files\Java\jre6\lib\amd64\jvm. cfg'"

cassandra - 如何反序列化动态复合列值?

java - Cassandra 每日数据清除?

scala - 如何强制 IntelliJ IDEA 在依赖项更改后从 build.sbt 重新加载依赖项?

scala - 为什么此Scala隐式参数示例不起作用?

scala - Scala 中两个标签中最不常见的 TypeTag?

java - Play 不断写入光盘?在 Amazon ec2 上导致更高的账单

cassandra - 如何使用 cql 查询通过 java 客户端 hector 从 cassandra 中获取不同的数据类型

java - 我可以部分回放 Cassandra 提交日志吗?