首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala :参数类型匹配

Scala :参数类型匹配
EN

Stack Overflow用户
提问于 2016-12-05 13:27:19
回答 1查看 90关注 0票数 2

我正在制作一个应用程序,它使用Scala在Solr中发出请求。实际上,在我的请求之后,我得到了10个案例类。为了制作一个通用应用程序,我尝试使用参数类型。

我的问题是:我必须切换我的Paramter类型,它是不工作的(由于擦除)。

请参阅我的反射和伪代码。:

代码语言:javascript
复制
getItem[Apple](10)

=>

代码语言:javascript
复制
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
}

在这里,我的地图:

代码语言:javascript
复制
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”错误。我知道这是因为擦除,但我不知道该怎么做。

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-05 13:34:52

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40975363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档