У меня есть небольшое приложение Scala / Neo4j, которое связывает людей и темы через отношения между «опытным» и «заинтересованным». У него есть REST / Json Api (использующий Scalatra), и я столкнулся с типичной проблемой стирания типов, когда я хотел добавить метод asJson в List [Person] и List [Topic]. Я хотел бы реализовать различное поведение сериализации Json для разных типов контента, но, конечно, типы стираются. Лучшее, что я смог придумать, это следующий трюк во время выполнения:
implicit def topicsOrPeopleAsJson[T](list: List[T]) = new {
def asJson: String = {
list match {
case head :: tail if (head.isInstanceOf[Topic]) => topicsToJson(list.asInstanceOf[List[Topic]])
case head :: tail if (head.isInstanceOf[Person]) => peopleToJson(list.asInstanceOf[List[Person]])
case _ => "[]"
}
}
private def peopleToJson(people: List[Person]) = {
...
}
private def topicsToJson(topics: List[Topic]) = {
...
}
}
Это прекрасно работает, но мне было интересно, есть ли лучшее решение, может быть, что-то, включающее классы типов, тему, с которой я не очень хорошо знаком (пока).