Java 斯卡拉番石榴

Java 斯卡拉番石榴,java,scala,reflection,types,guava,Java,Scala,Reflection,Types,Guava,我正在使用scala中的java库 我需要在scala中实现一个抽象类,但是java中抽象类中使用的guava的TypeToken存在一些问题。问题在于,有时在scala中,TypeToken无法推断泛型类型: import com.google.common.reflect.TypeToken class SomeClass[T] { val tok = new TypeToken[T](getClass){} } object TypeTokenTest extends App

我正在使用scala中的java库

我需要在scala中实现一个抽象类,但是java中抽象类中使用的guava的TypeToken存在一些问题。问题在于,有时在scala中,TypeToken无法推断泛型类型:

import com.google.common.reflect.TypeToken


class SomeClass[T] {
  val tok = new TypeToken[T](getClass){}
}


object TypeTokenTest extends App {
  val ok = new SomeClass[String]{}
  println(ok.tok)  // `java.lang.String`, OK!!

  def wrap[O]() = {
    new SomeClass[O]{}
  }

  val notOk = wrap[String]()
  println(notOk.tok)  // `O`, not Ok ...
}
所以在上面的代码中,如果它是一个简单的用法,那么它工作得非常好。但是如果存在间接寻址(具体类型从函数传递到类),它就不再工作了


有没有关于如何让它工作的建议

您可能需要检查这一点,顺便说一句,它甚至在Java中也不起作用。这是Java泛型的局限性。谢谢各位,有没有关于深入阅读Java泛型的建议?我想您已经看到了?