Scala:如何扩展不可变列表

Scala: how to extend an immutable List

程序的许多方法接收 List[Map[String, String]] 作为参数。

我想通过定义 class 将其形式化并使其更具可读性,例如:

class MyClass extends  List[Map[String, String]]

然而它抛出一个错误:

Illegal inheritance from sealed class 'List'

有没有合适的处理方式?

你需要的东西叫做类型别名:

type MyClass = List[Map[String, String]]

https://alvinalexander.com/scala/scala-type-aliases-syntax-examples

你得到这个错误是因为你试图扩展一个密封的特性,它只能在定义特性的同一个文件中扩展。

https://alvinalexander.com/scala/scala-type-aliases-syntax-examples https://underscore.io/blog/posts/2015/06/02/everything-about-sealed.html

一种选择是使用 composition rather than inheritance:

case class MyClass(value: List[Map[String, String]])

这比使用类型别名更安全,因为您只能传递 MyClass 的实例,其中 MyClass 是预期的,而类型别名方法允许任何 List[Map[String, String]].它还可以帮助避免 primitive obsession。您选择哪一个取决于您的用例。