我对 Scala 相当陌生,正在编写一个 API 库并尝试仅使用 val 和不可变对象(如果可能)。我正在尝试确定建模对象的正确方法。假设有几个“Post”对象,它们都共享一些公共字段,并且每个都添加自己的特定字段:
abstract class Post(val id: Int, val name: String, ...)
case class TextPost(val id: Int, val name: String, ..., val text: String) extends Post(id, name, ...)
case class PhotoPost(val id: Int, val name: String, ..., val url: String) extends Post(id, name, ...)
这种方法增加了很多重复的声明和样板代码,尤其是在处理许多 Post 子类和在抽象类中声明的共享字段时。在我看来,这是由于使用只能由构造函数初始化的 vals 引起的。有没有更好的方法来创建这里详述的关系,或者我必须因为只想使用不可变对象而遭受这种痛苦?