Scala类[_ $ 1],其中类型_ $ 1

时间:2014-06-12 20:40:52

标签: scala reflection types scala-2.10 jackson-modules

现在尝试实例化一个新的JSONConverter来注册Jackson的Scala模块。

  private def getConverter(implicit m: ClassTag[T]) = {
    new JSONConverter[T](classTag[T].runtimeClass, bucketName)
    JSONConverter.registerJacksonModule(DefaultScalaModule)
    converter
  }

上面的代码位于标准的Scala特征中,看起来像trait Writeable[T] { }

上面代码的问题在于Scala似乎在使用Types时遇到困难。编译错误是:

[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>)似乎是级联问题。这里有什么想法吗?

1 个答案:

答案 0 :(得分:5)

runtimeClass正在使用错误的类型参数重新调整Class。尝试:

new JSONConverter(classTag[T].runtimeClass.asInstanceOf[Class[T]], bucketName(clientId))