Разница между «*» и «Any» в генериках Котлина

Я не уверен, что полностью понимаю разницу между SomeGeneric<*> и SomeGeneric<Any> . Я думаю, что «*» представляет что угодно (wild card), а «Any» представляет объект, на который наследуются ВСЕ объекты. Кажется, они должны быть одинаковыми, но это не так?

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

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

В контексте, я думаю, вы подразумеваете, SomeGeneric<*> эквивалентен SomeGeneric<out Any?> . Эквивалент Java – SomeGeneric<? extends Object> SomeGeneric<? extends Object> .

Синтаксис называется «звездные проекции». Вот официальные документы: https://kotlinlang.org/docs/reference/generics.html#star-projections

Intereting Posts
Kotlin: Java не может разрешить символ Котлина? FragmentTransaction не будет компилироваться в проекте Android Kotlin Тестирование методов @ -синхронного возвращения в Spring @Async Anko 0.8 – ссылка на неразрешенные lparams Простой класс kotlin с mockito-тестом вызвал MissingMethodInvocationException Только последний элемент добавлен в RecyclerView в Android (Kotlin) kotlin.TypeCastException: null не может быть применено к ненулевому типу android.support.v7.widget.Toolbar Почему Kotlin выбрасывает IllegalArgumentException при использовании прокси-сервера Настройка привязок Guice в Котлине Определить возвращаемый тип Retrofit с использованием интерфейса вместо класса Как получить имена и значения параметров метода? Запечатанный класс в Котлине, Ошибка Несовместимых типов Как настроить Mockito для Kotlin и Android Постоянство помещения: ошибка: сущности и Pojos должны иметь полезный публичный конструктор Как исправить «Функция не является частью схемы для этого Царства» в расширении Царского Царства