Почему List можно читать как List?Интерфейс списка ковариантен: чтение строки безопасно там, где ожидается Any. Для изменяемого списка такое присваивание открыло бы возможность записать несовместимый элемент. Kotlin: generics.
Почему Sink подходит вместо Sink?Обработчик любых значений умеет обработать и строку. Направление подтипов для потребителя in T противоположно направлению для производителя. Kotlin: generics.
Можно ли добавлять строки в MutableList<*>?Нет: фактический тип элементов неизвестен. Из него безопасно читать Any?, но даже запись null не разрешается только на основании звёздочки. Kotlin: generics.
Чем crossinline отличается от noinline?crossinline запрещает нелокальный return, сохраняя возможность встраивания. noinline отключает встраивание параметра, чтобы его можно было хранить или передать как обычную функцию. Kotlin: inline.
Докажет ли reified T = List тип каждого элемента?Нет. Параметры самого проверяемого List всё ещё стёрты. Нужна проверка содержимого; успешное приведение может привести к ClassCastException лишь при чтении элемента. Kotlin: generics.
Почему inline не стоит ставить на все функции?Копирование тела увеличивает код; без функциональных параметров или reified польза часто мала. Реальный эффект зависит от вызывающего кода и оптимизатора. Kotlin: inline.