Un sealed
trait peut être prolongé que dans le même fichier que sa déclaration.
Ils sont souvent utilisés pour fournir une alternative à l' enums
. Car ils peuvent seulement être étendue dans un seul fichier, le compilateur sait tous les sous-types et la raison peut-elle à ce sujet.
Par exemple, avec la déclaration:
sealed trait Answer
case object Yes extends Answer
case object No extends Answer
Le compilateur émet un avertissement si un match n'est pas exhaustive:
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
Si vous devez utiliser des scellés traits (ou scellé classe abstraite) si le nombre de sous-types est fini et connu à l'avance. Pour plus d'exemples, vous pouvez jeter un oeil à la liste et de l'option de mise en œuvre.