「skilledAt」と「interestedIn」の関係を通じて人々とトピックをリンクする小さな Scala/Neo4j アプリケーションがあります。REST/Json API (Scalatra を使用) があり、List[Person] と List[Topic] に「asJson」メソッドを追加しようとすると、典型的な型消去の問題に遭遇しました。コンテンツ タイプごとに異なる 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]) = {
...
}
}
これは問題なく機能しますが、より良い解決策があるかどうか疑問に思っていました。おそらく型クラスを含む何か、私があまりよく知らないトピック (まだ) です。