Можливо, буде корисно подумати про проекцію зірки як про спосіб представити не просто будь-який тип, а якийсь фіксований тип, який ви не знаєте, що саме.
Наприклад, тип MutableList<*>
представляє список чогось (ви не знаєте, що саме). Тож якщо ви спробуєте щось додати до цього списку, вам це не вдасться. Це може бути список String
s, або список Int
s, або список чогось іншого. Компілятор забороняє взагалі містити будь-який об’єкт у цьому списку, оскільки він не може перевірити, що список приймає об'єкти такого типу. Однак, якщо ви спробуєте витягти елемент із такого списку, ви неодмінно отримаєте об'єкт типу Any?
, оскільки всі об'єкти в Котліні успадковують відAny
.
З коментаря asco нижче:
Крім того, вони List<*>
можуть містити об'єкти будь-якого типу, але тільки цього типу, тому вони можуть містити рядки (але тільки рядки), тоді як вони List<Any>
можуть містити рядки та цілі числа та що інше, все в тому ж списку.