2016-12-05 2 views
2

Я делаю приложение, которое делает запрос в Solr с Scala. На самом деле, я получил 10 классов case, которые я привел после моих запросов. Чтобы создать универсальное приложение, я пытаюсь использовать тип параметра.Scala: Match of parameter Тип

Моя проблема: мне нужно включить свой параметр 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] 
     } 
} 

Я получил сообщение об ошибке "Нет TypeTag для Т" , Я знаю его, потому что стираюсь, но я понятия не имею, как это сделать.

Я просто хочу, чтобы иметь возможность проверить мой тип параметра ...

Спасибо.

+1

У меня есть Фелинг вы ищете для чего-то подобного: http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html – Pavel

+0

Да, я знаю, мне нужно использовать TypeTag. Вероятно: я понятия не имею, как его использовать и реализовать ... – GreGGus

ответ

5

Вы должны добавить 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 
} 
+0

Да, я понимаю. Но у меня есть эта проблема сейчас, как и нет TypeTag. No TypeTag доступен для T по адресу > mapsolr [T] .toUseCase (docs) // отправить solr docs на карту – GreGGus

+0

Кстати, предоставление правильного импорта было бы неплохо. – ipoteka