现在正在尝试实例化一个新的JSONConverter
来注册Jackson的Scala模块。
private def getConverter(implicit m: ClassTag[T]) = {
new JSONConverter[T](classTag[T].runtimeClass, bucketName)
JSONConverter.registerJacksonModule(DefaultScalaModule)
converter
}
上面的代码位于一个标准的Scala trait中,看起来像trait Writeable[T] { }
。
上面代码的问题是Scala似乎在类型方面遇到了困难。编译错误是:
[error] found : Class[_$1] where type _$1
[error] required: Class[T]
[error] val converter = new JSONConverter[T](classTag[T].runtimeClass, bucketName(clientId))
[error] ^
[error] one error found
谁知道这个问题的来源或简单的修复方法?谢谢!
更新虽然@wingedsubmariner
有一个答案,允许这最初编译,一旦我去写更多的代码,问题进一步级联。我将展示一个示例:
val o = bucketLookup(clientId).fetch(id, classTag[T].runtimeClass).withConverter(converter).withRetrier(DB.retrier).r(DB.N_READ).execute()
在withConverter
编译器抛出相同的错误:
[error] found : com.basho.riak.client.convert.JSONConverter[T]
[error] required: com.basho.riak.client.convert.Converter[_$1] where type _$1
[error] val o = bucketLookup(clientId).fetch(id, classTag[T].runtimeClass).withConverter(converter).withRetrier(DB.retrier).r(DB.N_READ).execute()
我甚至尝试使用converter.asInstanceOf[JSONConverter[T]]
做相同的类型转换,但继承(JSONConverter<T> extends Converter<T>
)似乎级联的问题。有什么想法吗?
runtimeClass
返回类型参数错误的Class
。试一试:
new JSONConverter(classTag[T].runtimeClass.asInstanceOf[Class[T]], bucketName(clientId))