Да, этот пример имеет смысл. Расширение AnyVal
полезно, когда вам нужна определенная семантика для типа, но вы не хотите оплачивать дополнительные затраты на выделение, которые идут вместе с ним. Например, допустим, у вас есть экземпляр класса типов для вывода строкового представления значений, например Show[A]
, и вы хотите присвоить определенную семантику UUID
, но в области уже существует экземпляр Show[UUID]
, который вы не можете control, это может быть полезно при переносе типа и введении для него неявного класса типов.
Обратите внимание, что AnyVal
может в конечном итоге выделить экземпляры класса-оболочки в определенных случаях, как указано в этой документации :
Класс значения фактически создается, когда:
- класс значений рассматривается как другой тип.
- класс значений назначен массиву.
- выполнение тестов типов во время выполнения, таких как сопоставление с образцом.