Передача информации о типе для работы в Scala - PullRequest
3 голосов
/ 05 октября 2011

У меня есть код, который выполняет некоторые общие операции над объектами json, а именно извлечение.Так что я хотел бы создать универсальную функцию, которая принимает параметр типа, какой класс ожидать, код выглядит следующим образом:

def getMessageType[T](json: JValue): Either[GenericError,T] = {
  try {
    Right(json.extract[T])
  } catch {
    case e: MappingException => jsonToError(json)
  }
}

Вопрос в том, как передать информацию T в эту функцию?

1 Ответ

7 голосов
/ 05 октября 2011

Если вы посмотрите на определение извлечения : вы увидите, что оно неявно принимает Manifest:

def extract[A](json: JValue)
    (implicit formats: Formats, mf: Manifest[A]): A

Это обходит удаление типа JVM путем принятия типа ""в качестве значения.Для вашего случая, я думаю, вы должны сделать то же самое:

def getMessageType[T](json: JValue)
    (implicit f: Formats, mf: Manifest[T]): T =
{
    json.extract[T]
}

This:

  1. Дает вашему методу неявные параметры, которые должны выполняться вызывающей стороной.

  2. Создает (те же самые) неявные параметры для передачи их extract.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...