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。您选择哪一个取决于您的用例。
程序的许多方法接收 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。您选择哪一个取决于您的用例。