Я хотел бы знать имя универсального класса.Guice, неспособный связать ClassTag [T] (знать имя класса T)
Решение, которое я использую сейчас, является следующим. Я определил класс 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]) {
}
Может быть, вы можете использовать Guice в 'TypeLiteral' вместо' ClassTag'? –
Я нашел несколько тем для использования 'TypeLiteral' http://stackoverflow.com/questions/8772555/generics-hell-can-i-construct-a-typeliteralsett-using-generics https://groups.google.com/ forum/#! topic/google-guice/1jbWcdeCF6U. Я пытался реализовать это в Scala с Guice, но я не добился успеха. Пример: '@Provides def обеспечитьTest [T: ClassTag](): TypeLiteral [ClassTag [T]] = { ТипLiteral.get (Types.newParameterizedType (ClassTag.getClass, classTag [T] .getClass)) }' (не компилируется). Есть идеи ? – Dnomyar
Не уверен, что вы там делаете, но я действительно имел в виду * вместо * 'ClassTag'. –