可能有什么问题?
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/