Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpGnPr 108 of 299 menu
◀ ▶

Проекция типа в Kotlin

Класс коллекции объявлен без меток variance, но в типе аргумента функции можно указать проекцию: out или in на месте параметра типа. Так задают, только читают ли из списка или только пишут в него.

Открытый класс животного и два наследника понадобятся для примера чтения:

open class Animal(val name: String) class Dog(name: String) : Animal(name) class Cat(name: String) : Animal(name) fun printNames(pets: MutableList<out Animal>) { for (pet in pets) { println(pet.name) } } fun main() { val dogs: MutableList<Dog> = mutableListOf(Dog("rex")) printNames(dogs) }

Запись в список через проекцию in допускает более конкретный тип элементов, когда функция лишь добавляет данные:

fun addDog(target: MutableList<in Dog>) { target.add(Dog("mila")) } fun main() { val animals: MutableList<Animal> = mutableListOf(Cat("lea")) addDog(animals) for (item in animals) { println(item.name) } }

Сделайте базовый класс фигуры и наследника круг. Напишите функцию, которая выводит имена фигур из списка с проекцией для чтения. Передайте список кругов и проверьте вывод.

Напишите функцию, которая добавляет новый круг в список с проекцией для записи. Вызовите ее для списка фигур и выведите количество элементов после добавления.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить