Класс scala.AnyVal
абстрактный открытый класс AnyVal
AnyVal является корневым классом всех типов значений, которые описывают значения, не реализованные как объекты в подлежащей системе. Типы значений определены в спецификации языка Scala, раздел 12.2.
Стандартная реализация включает девять AnyVal подтипов:
scala.Double, scala.Float, scala.Long, scala.Int, scala.Char, scala.Short и scala.Byte — числовые типы значений.
scala.Unit и scala.Boolean — нечисловые типы значений.
Другие группировки:
Типы поддиапазона — scala.Byte, scala.Short и scala.Char.
Целочисленные типы включают типы поддиапазона, а также scala.Int и scala.Long.
Типы с плавающей точкой — scala.Float и scala.Double.
До Scala 2.10, AnyVal был запечатанным траитом. Однако начиная со Scala 2.10, возможно определить подкласс AnyVal, называемый пользовательским типом значения, который обрабатывается компилятором особым образом. Правильно определённые пользовательские типы значений обеспечивают повышение производительности для пользовательских типов, избегая выделения памяти для объекта во время выполнения и заменяя вызовы виртуальных методов вызовами статических методов.
Пользовательские типы значений, которые избегают выделения памяти...
должны иметь один
valпараметр, который является основой для представления во время выполнения.могут определять
defы, но неvalы,varы или вложенныеtraitsы,classы илиobjectы.обычно не наследуют другие траиты помимо
AnyVal.не могут использоваться в проверке типов или сопоставлении с образцом.
не могут переопределять
equalsилиhashCodeметоды.
Минимальный пример:
class Wrapper(val underlying: Int) extends AnyVal {
def foo: Wrapper = new Wrapper(underlying * 19)
}
Важно отметить, что пользовательские типы значений ограничены и в некоторых случаях всё ещё должны выделять экземпляр типа значения во время выполнения. Эти ограничения и обстоятельства более подробно описаны в Value Classes and Universal Traits.
| Супертипы |
|---|
| Известные подтипы | 145 типов |
|---|
© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/AnyVal.html