将泛型传递给Implicit类

时间:2016-09-17 11:49:28

标签: scala playframework playframework-2.3

我在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]

知道怎么做到这一点吗?

问候。

1 个答案:

答案 0 :(得分:0)

您的代码似乎存在两个问题。

  1. CacheApi应该是T类型的参数,意思是,它应该如下所示:class CacheApi[T](...),而您的cacheUtils类参数应该是cache: CacheApi[T] cache: CacheApi
  2. 不太重要,但这里的上下文似乎是多余的。
  3. 修改

    根据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("")