【发布时间】:2015-03-04 11:03:57
【问题描述】:
我知道 guava 的 TypeToken 可以做到这一点:
class C[I, O]
class A[T] {
val tok = new TypeToken[T](getClass){}
}
val a = new A[C[Integer, String]]{}
println(a.tok) // somepackage.C<java.lang.Integer, java.lang.String>
但是使用 scala 的 ClassTag,我得到:
class B[T: ClassTag] {
// runtime class
val clazz = implicitly[ClassTag[T]].runtimeClass
// also tries to construct a guava type token
val tok = TypeToken.of(clazz).asInstanceOf[TypeToken[T]]
}
val b = new B[C[Integer, String]]
println(b.clazz) // class somepackage.C
println(b.tok) // somepackage.C
因此,使用 ClassTag,C 包含的遗传类型会丢失。是否可以在 scala 中使用 ClassTag 或其他东西获取 somepackage.C?
谢谢!
【问题讨论】:
标签: java scala reflection types guava