Запечатанная черта - это то же самое, что запечатанный класс?
Что касается sealed
, да. Они разделяют обычные различия между trait
и class
, конечно.
Или, если нет, в чем различия?
Мут.
Когда стоит использовать запечатанную черту (а когда нет)?
Если у вас есть sealed class X
, то вы должны проверить, X
а также любые подклассы. То же самое не относится к sealed abstract class X
или sealed trait X
. Так что вы могли бы сделать sealed abstract class X
, но это гораздо более многословно, чем просто trait
и для небольшого преимущества.
Основным преимуществом использования abstract class
над a trait
является то, что он может получать параметры. Это преимущество особенно актуально при использовании классов типов. Допустим, вы хотите построить отсортированное дерево, например. Вы можете написать это:
sealed abstract class Tree[T : Ordering]
но вы не можете сделать это:
sealed trait Tree[T : Ordering]
поскольку границы контекста (и границы представления) реализованы с неявными параметрами. Учитывая, что черты не могут получать параметры, вы не можете этого сделать.
Лично я предпочитаю sealed trait
и использую это, если какая-то конкретная причина не заставляет меня использовать sealed abstract class
. И я говорю не о тонких причинах, а о личных причинах, которые вы не можете игнорировать, таких как использование классов типов.