斯卡拉 : Match of parameter Type

标签 scala solr types

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

我的问题:我必须切换我的参数类型,但它显然不起作用(由于删除)。

查看我的反射(reflection)和伪代码:

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”。我知道这是因为删除,但我不知道该怎么做。

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

谢谢。

最佳答案

您需要添加绑定(bind)到 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
}

关于斯卡拉 : Match of parameter Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40975363/

相关文章:

scala - 如何使用直到循环将不可变的 Seq 转换为可变的 seq

elasticsearch - elasticsearch上的双向匹配

javascript - 在 solr 查询中返回空字段

c++ - UINT32_MAX 的 C++ 等价物是什么?

date - 如何在 apache thrift 中表示日期类型

scala - 取决于参数类型的返回类型(例如 Await.ready())不能按预期工作

scala - 映射失败的 Future 的异常

scala - 并行 Scala 流的内存消耗

scala - 我想使用 scala 驱动程序在 mongodb 上执行查找操作

apache - 在 localhost 中尝试 solr 时出错