在 Scala 中使用案例类创建层次结构

Posted

技术标签:

【中文标题】在 Scala 中使用案例类创建层次结构【英文标题】:Making a hierarchy with case classes in Scala 【发布时间】:2016-07-13 13:42:45 【问题描述】:

我有两种类型的文档:PDFDocument 和 XMLDocument。两者都是案例类(我需要匹配它们)。 现在,我需要收集文档。因此,我创建了 PrivateDocument 来创建层次结构。 这些文件是我从对外部服务器的请求中获取的,所以我想验证该请求的响应:

response.json.validate[List[ProformaDocument]]

问题是,如果 PrivateDocument 是一个 case 类,那么 case-to-case 继承是被禁止的。 如果 PrivateDocument 是一个特征或一个类,那么我无法反序列化 JSON,因为该特征没有读取。

在所有这些之后,我需要将列表返回到询问它的网页。因此,我需要再次将 List 转换为 Json 数组。

在这种情况下,我可以做些什么来建立正确的层次结构并管理案例类/Json 转换?

【问题讨论】:

【参考方案1】:

你仍然可以在普通类上进行匹配。

虽然case-to-case继承不起作用,但您可以创建一个普通的抽象基类并让case类从它继承。

【讨论】:

是一样的。这就是发生的事情:没有找到类型 List[model.PrivateDocument] 的 Json 反序列化器。尝试为此类型实现隐式读取或格式。 那就换个方式试试吧。不要使用案例类。 Case 类提供了自动创建的构造函数、equals 和 hash 的好处,但有时我们负担不起。

以上是关于在 Scala 中使用案例类创建层次结构的主要内容,如果未能解决你的问题,请参考以下文章

多级测试类层次结构中的 Spring @ContextHierarchy(使用 Scala 和 ScalaTest)

Scala 类型层次结构

必知|Scala类型层次结构

scala的集合层次结构

只有创建视图层次结构的原始线程才能触及其视图异常[重复]

scala集合与数据结构