密封类在“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(使用前将#替换为@)