Scala:如何扩展不可变列表

时间:2019-01-31 13:58:09

标签: scala implicit sealed

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

我想通过定义诸如以下的类来使其正规化并使其更具可读性:

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

但是它会引发错误:

Illegal inheritance from sealed class 'List'

有适当的处理方法吗?

2 个答案:

答案 0 :(得分:5)

您需要的东西称为类型别名:

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

答案 1 :(得分:1)

一种选择是使用composition rather than inheritance

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

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