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