Класс AnyVal.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.2.0/scala/AnyVal.html