Я хотел бы знать имя универсального класса.
Решение, которое я использую сейчас, заключается в следующем. Я определил класс 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]) {
}
TypeLiteral
Guice вместоClassTag
? - person Tavian Barnes   schedule 06.09.2016TypeLiteral
stackoverflow.com/questions/8772555/ groups.google.com/forum/#!topic/google-guice/1jbWcdeCF6U . Я пытался реализовать это в Scala с помощью Guice, но мне это не удалось. Пример:@Provides def provideTest[T: ClassTag](): TypeLiteral[ClassTag[T]] = { TypeLiteral.get(Types.newParameterizedType(ClassTag.getClass, classTag[T].getClass)) }
(не компилируется). Любая идея ? - person Dnomyar   schedule 07.09.2016ClassTag
. - person Tavian Barnes   schedule 07.09.2016TypeLiteral<Person>
вы можете использоватьtypeLiteral.getType().getTypeName()
, чтобы получить полное имяPerson
. Я не знаю Scala, поэтому не могу привести пример Scala. Но проблема в том, чтоClassTag<T>
нельзя вводить, аTypeLiteral<T>
можно. - person Tavian Barnes   schedule 08.09.2016