我正在制作一个应用程序,它使用Scala在Solr中发出请求。实际上,在我的请求之后,我得到了10个案例类。为了制作一个通用应用程序,我尝试使用参数类型。
我的问题是:我必须切换我的Paramter类型,它是不工作的(由于擦除)。
请参阅我的反射和伪代码。:
getItem[Apple](10)=>
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
}在这里,我的地图:
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]
}
}我得到了“T没有可用的TypeTag”错误。我知道这是因为擦除,但我不知道该怎么做。
我只想测试我的参数类型..。
谢谢。
发布于 2016-12-05 13:34:52
您需要添加绑定到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]
}
}您还需要在使用此方法的泛型代码中传递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
}https://stackoverflow.com/questions/40975363
复制相似问题