什么是密封特质?

2023-11-22

密封类在“Scala 编程”中进行了描述,但密封特征则没有。 我在哪里可以找到有关密封特征的更多信息?

我想知道,密封特征是否与密封类相同? 或者,如果不是,有什么区别? 什么时候使用密封特征是个好主意(什么时候不是)?


A sealed特征只能在与其声明相同的文件中扩展。

它们经常被用来提供替代方案enums。由于它们只能在单个文件中扩展,因此编译器知道每种可能的子类型并可以对其进行推理。

例如声明:

sealed trait Answer
case object Yes extends Answer
case object No extends Answer

如果匹配不详尽,编译器将发出警告:

scala> val x: Answer = Yes
x: Answer = Yes

scala> x match {
     |   case No => println("No")
     | }
<console>:12: warning: match is not exhaustive!
missing combination            Yes

因此,如果可能的子类型数量是有限的并且提前已知,则应该使用密封特征(或密封抽象类)。有关更多示例,您可以查看list and option实施。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是密封特质? 的相关文章

随机推荐