hector scala类型不匹配

Dar*_*hey 3 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))}
Run Code Online (Sandbox Code Playgroud)

Kip*_*ros 6

错误是说createColumn需要一个类型的序列化程序Serializer[Any],但你传递的是一个类型Serializer[Integer].这仅Serializer在其类型参数(即,定义为Serializer[+T])中具有协变性时才有效.但相反,Serializer来自Java,其中协方差的工作方式不同.

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

如果你不能修改createColumn,那么最后的办法是使用"type system escape hatch" asInstanceOf来强制转换为预期的类型:

val is = IntegerSerializer.get.asInstanceOf[Serializer[Any]] // defeats type system
mutator.addInsertion(... is ...)
Run Code Online (Sandbox Code Playgroud)