scalabook

Форк
0
/
upper-type-bounds.md 
52 строки · 2.1 Кб

Верхнее ограничение типа

Параметры типа и члены абстрактного типа могут быть ограничены определенными диапазонами. Такие диапазоны ограничивают конкретные значение типа и, возможно, предоставляют больше информации о членах таких типов. Верхнее ограничение типа T <: A

указывает на то что тип T
относится к подтипу типа A
. Приведем пример, демонстрирующий верхнее ограничение для типа класса PetContainer
:

abstract class Animal:
def name: String
abstract class Pet extends Animal
class Cat extends Pet:
override val name: String = "Cat"
class Dog extends Pet:
override val name: String = "Dog"
class Lion extends Animal:
override val name: String = "Lion"
class PetContainer[P <: Pet](p: P):
def pet: P = p
val dogContainer = PetContainer[Dog](Dog())
val catContainer = PetContainer[Cat](Cat())

Класс PetContainer

принимает тип P
, который должен быть подтипом Pet
. Dog
и Cat
- это подтипы Pet
, поэтому можно создать новые PetContainer[Dog]
и PetContainer[Cat]
. Однако, если попытаться создать PetContainer[Lion]
, то получим следующую ошибку:

val lionContainer = PetContainer[Lion](Lion())
// error:
// Type argument App0.this.Lion does not conform to upper bound App0.this.Pet
// val lionContainer = PetContainer[Lion](Lion())
//

Это потому, что Lion

не является подтипом Pet
.


Ссылки:

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

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

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

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