Разница между «*» и «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 Покрытие Jacoco и параметры по умолчанию Kotlin Анимация (прокрутка) одна ViewGroup блокирует несвязанные виды из анимации до завершения Firebase Firestore как перечислить авторизованные документы? Как получить доступ к сопутствующему объекту Kotlin в Java? Android 4.x VerifyError, вызванный методом Котлина Kotlin: Интерфейс с неизменяемым свойством, реализуемым классом с изменчивым Kotlin kotlinClass.class.getName () не может вернуть имя пакета, но только простое имя класса Использование @JvmOverloads Kotlin с шаблоном Fragment.newInstance () Android Преобразование императивной функции root в функциональный стиль в kotlin Почему Kotlin не может вывести следующий аргумент лямбда (после преобразования Java -> Kotlin)? Kotlin DialogFragment editText редактируемый всегда null Kotlin: Передача реализации интерфейса в качестве параметра Вставить или добавить элемент в ArrayList в Котлин? Анко. Выполнение изменений асинхронного макета