scalabook

Форк
0
/
types-generics.md 
49 строк · 2.2 Кб

Generics типы

Универсальные (generic) классы (или trait-ы) принимают тип в качестве параметра в квадратных скобках [...]

. Для обозначения параметров типа согласно конвенции Scala используется одна заглавная буква (например, A
). Затем этот тип можно использовать внутри класса по мере необходимости для параметров экземпляра метода или для возвращаемых типов:

// здесь мы объявляем параметр типа A
// v
class Stack[A]:
private var elements: List[A] = Nil
// ^
// здесь мы ссылаемся на этот тип
// v
def push(x: A): Unit = { elements = elements.prepended(x) }
def peek: A = elements.head
def pop(): A =
val currentTop = peek
elements = elements.tail
currentTop

Эта реализация класса Stack

принимает любой тип в качестве параметра. Прелесть дженериков состоит в том, что теперь можно создавать Stack[Int]
, Stack[String]
и т. д., что позволяет повторно использовать реализацию Stack
для произвольных типов элементов.

Пример создания и использования Stack[Int]

:

val stack = Stack[Int]
stack.push(1)
stack.push(2)
println(stack.pop())
// 2
println(stack.pop())
// 1

Подробности о том, как выразить ковариантность с помощью универсальных типов, см. в разделе "Ковариантность".


Ссылки:

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.