1

我想知道一个泛型类的名称。

我现在使用的解决方案如下。我定义了class A[T: ClassTag] {...}能够做的类classTag[T].toString

这可以编译,但 Guice 存在问题。我得到错误No implementation for scala.reflect.ClassTag<com.test.Person> was bound

有没有 :

  • 知道可以与 Guice 一起使用的泛型类的名称的另一种解决方案?或者
  • 一种ClassTag[T]与 Guice 绑定的方法?

完整代码:

package com.test

case class Person(age: Int)

class A[T: ClassTag] {

  // I need to know the (full) name of type T (e.g. com.test.Person)
  val tClassName = classTag[T].toString

}

class B @Inject()(a: A[Person]) {

}
4

1 回答 1

0

感谢@tavian-barnes 的帮助,我找到了解决这个问题的方法。解决方案是添加A一个隐含值TypeLiteral[T]。然后,您只需调用typeLiteral.getType.getTypeName即可获取geneirc class 的全名T

完整代码:

package com.test

case class Person(age: Int)

class A[T]()(implicit val typeLiteral: TypeLiteral[T]) {

  val tClassName = typeLiteral.getType.getTypeName

}

class B @Inject()(a: A[Person]) {

    println(a.tClassName) // prints `com.test.Person`

}
于 2016-09-09T10:12:12.770 回答