Scala:参数类型的匹配

Gre*_*Gus 2 solr types scala

我正在制作一个应用程序,在Solr中使用Scala提出请求.实际上,我有10个案例类,我在我的请求后实例化.要制作通用应用程序,我尝试使用参数类型.

我的问题:我必须切换我的Paramter Type并且它没有工作(由于擦除).

请参阅我的反思和伪代码:

getItem[Apple](10)
Run Code Online (Sandbox Code Playgroud)

=>

def getItem[T](id : Option[Int]) = {
... // Here I request Solr then i want to create my caseClass from Solr docs.
mapsolr[T].toUseCase(docs) // send solr docs to map
}
Run Code Online (Sandbox Code Playgroud)

这是我的映射:

class mapSolr(docs){
    def toUseCase[T] = {
       // Here i want to be able to make a switch on T
        typeOf[T] match {
        case x if x =:= typeOf[CaseClass1] =>
           blabla // (return List[CaseClass1]
        case x if x =:= typeOf[CaseClass2] =>
           blabla // (return List[CaseClass2]
       }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误"没有TypeTag可用于T".我知道它是因为擦除,但我不知道该怎么做.

我只是想测试我的参数类型......

谢谢.

ada*_*mwy 5

您需要添加绑定到T的TypeTag上下文:

import scala.reflect.runtime.universe._

def toUseCase[T: TypeTag] = {
   // Here i want to be able to make a switch on T
    typeOf[T] match {
    case x if x =:= typeOf[CaseClass1] =>
       blabla // (return List[CaseClass1]
    case x if x =:= typeOf[CaseClass2] =>
       blabla // (return List[CaseClass2]
   }
}
Run Code Online (Sandbox Code Playgroud)

您还需要在使用此方法的通用代码中传递TypeTag:

def getItem[T: TypeTag](id : Option[Int]) = {
  ... // Here I request Solr then i want to create my caseClass from Solr docs.
  mapsolr[T].toUseCase(docs) // send solr docs to map
}
Run Code Online (Sandbox Code Playgroud)