Ответ 1
Класс final
не может быть расширен, период.
A sealed
признак может быть расширен только в том же исходном файле, который был объявлен. Это полезно для создания ADT (алгебраических типов данных). ADT определяется суммой его производных типов.
например:.
- An
Option[A]
определяетсяSome[A]
+None
. - A
List[A]
определяется::
+Nil
.
sealed trait Option[+A]
final case class Some[+A] extends Option[A]
object None extends Option[Nothing]
Поскольку Option[A]
запечатан, он не может быть расширен другими разработчиками - это может изменить его значение.
Some[A]
является окончательным, поскольку он не может быть расширен, период.
В качестве дополнительного бонуса, если черта запечатана, компилятор может предупредить вас, если совпадение с шаблоном недостаточно полно, потому что известно, что Option
ограничено Some
и None
.
opt match {
case Some(a) => "hello"
}
Предупреждение: совпадение не может быть исчерпывающим. Он потерпит неудачу при следующем вводе:
None