Принцип звёздной проекции (Star Projection) в Kotlin — это способ безопасного использования генериков, когда не важен конкретный тип аргумента, но нужно обеспечить типобезопасность.
Применяется в следующих случаях:
*: Эквивалентен Any?. Обозначает, что тип аргумента неизвестен и нет информации о его границах. Можно читать только элементы, которые являются экземплярами Any?, и нельзя записывать никакие, кроме null.
kotlin
in *: Эквивалентен in Nothing. Используется для ковариантных типов (out), когда не важен конкретный нижний тип. Можно только записывать элементы (типа Nothing, что невозможно), но нельзя читать.
kotlin
out *: Эквивалентен out Any?. Используется для контравариантных типов (in), когда не важен конкретный верхний тип. Можно только читать элементы (как Any?), но нельзя записывать.
kotlin
Основное назначение звёздных проекций — безопасное взаимодействие с generic-классами и функциями, когда полный тип аргумента неизвестен или несущественен для текущей операции. Это помогает избежать unsafe cast и поддерживать типобезопасность.
Примеры использования: