0
ジェネリッククラスの名前を知りたいと思います。Guice、ClassTag [T]をバインドできません(Tクラスの名前を知るため)
私が今使っている解決策は次のとおりです。私はクラスclass A[T: ClassTag] {...}
をclassTag[T].toString
にできると定義しました。
これはコンパイルされますが、Guiceに問題があります。エラーNo implementation for scala.reflect.ClassTag<com.test.Person> was bound
が表示されます。
があります:
- 別の解決策は、Guiceのに仕事ができるジェネリッククラスの名前を知っていますか?または
- Guiceと
ClassTag[T]
を結びつける方法はありますか?
全コード:@ tavian-バーンズヘルプに
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/フォーラム/#!topic/google-guice/1jbWcdeCF6U。私はGuiceとScalaでそれを実装しようとしましたが、私は成功しませんでした。例: '@Provides def provideTest [T:ClassTag]():TypeLiteral [ClassTag [T]] = { TypeLiteral.get(Types.newParameterizedType(ClassTag.getClass、classTag [T] .getClass)) }'(コンパイルされません)。何か案が ? – Dnomyar
ここで何をやっているのか分かりませんが、「ClassTag」ではなく、実際には*を意味していました。 –