3

何が間違っている可能性がありますか?

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))}
4

1 に答える 1

6

createColumnエラーは type のシリアライザーが必要だと言っていますが、 typeSerializer[Any]のシリアライザーを渡していますSerializer[Integer]。これはSerializer、型パラメーターが共変である (つまり、 として定義されているSerializer[+T]) 場合にのみ機能します。しかし、代わりに、Serializer共分散が異なる方法で機能する Java から来ています。

Serializer[Integer]は に安全にキャストできるため、Scala コンパイラは、代わりに特定性の低いワイルドカード型を期待するように記述する必要がSerializer[_ <: Any]あることを示唆しています。createColumn

を変更できない場合createColumn、最後の手段は、「型システム エスケープ ハッチ」を使用asInstanceOfして、期待される型にキャストすることです。

val is = IntegerSerializer.get.asInstanceOf[Serializer[Any]] // defeats type system
mutator.addInsertion(... is ...)
于 2011-08-31T14:20:15.557 に答える