Матч на Scala Манифест - PullRequest
       13

Матч на Scala Манифест

0 голосов
/ 18 октября 2018

У меня есть метод, который анализирует JSON для объекта.В настоящее время у меня есть два def, которые делают одно и то же, за исключением одного синтаксического анализа A и других List[A].

Вот как это выглядит:

def parse[A <: V2Model](mf: Manifest[A]) = {
  // doing parsing
}

def parseList[A <: V2Model](mf: Manifest[List[A]]) = {
  // doing parsing of list
}

Это не очень читабельно иметь два одинаковых «def».Манифест не является неявным.

Есть ли способ сопоставить на Манифесте?

Я пробовал это без успеха:

def parse[A <: V2Model](mf: Manifest[A]) = {
  mf match {
    case _ : Manifest[List[A]] => // do list parsing
    case _ : Manifest[A] => // do object parsing
  }
}

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Если A является подтипом V2Model, то «mf: Manifest [A]» никогда не будет Manifest [List [A]].

Также не существует общего возвращаемого типа между A и List [A], поэтому невозможно достичь того, чего вы хотите.

Вопрос в том, почему вы хотите вести себя по-разному при разборе списков и при разборе объектов?Платформы сериализации уже решают эту проблему.

0 голосов
/ 18 октября 2018

Не в целом, но для этого случая (и все же некрасиво):

if (mf.runtimeClass == classOf[List[_]]) {
  // a list manifest
} else {
  // not a list manifest
}
...