我在Scala上非常新手,并且我试图将泛型类型传递给隐式类,但我找不到这样做的方法。
这是我隐含的类
object Utils{
implicit class cacheUtils[T:ClassTag](cache:CacheApi){
def getVal(key:String): T = cache.get(key).get
}
}
我是如何调用
的 import implicits.Utils.cacheUtils
Test @Inject()(cache: CacheApi) extends Controller {
val xxx: List[X] = cache.getVal(xx.asString)
}
但显然他希望类型T
而不是List[X]
知道怎么做到这一点吗?
问候。
答案 0 :(得分:0)
您的代码似乎存在两个问题。
CacheApi
应该是T
类型的参数,意思是,它应该如下所示:class CacheApi[T](...)
,而您的cacheUtils
类参数应该是cache: CacheApi[T]
cache: CacheApi
根据OP的要求,这是一个完整的例子:
class CacheApi[T](list: List[T]) {
def get = list.head
}
object Utils {
implicit class cacheUtils[T](cache: CacheApi[T]) {
def getVal(key: String): T = cache.get
}
}
import Utils._
val cacheStrings = new CacheApi(List("hello"))
val cacheLists = new CacheApi(List(List(42)))
val s: String = cacheStrings.getVal("")
val list: List[Int] = cacheLists.getVal("")