функции
fun someFun(list: MutableList<Pair<MutableList<Pair<*, *>, Any>>)
при вызове someFun вместо Any использовать разные типы например Int или Pair<*,*> ?
У меня не получается решить :(
fun<T> someFun(list: MutableList<..., T>>)
Тут проблема вот в чём: был у вас MutableList<Int>. Передали вы в метод с аргументом list:MutableList<Any>. Внутри метода в этот list добавили String, и теперь у вас List<Int> в котором лежит String. Так недопустимо, поэтому Kotlin и запрещает передавать MutableList<Int> в аргумент MutableList<Any>. И варианты тут: а) убрать Mutable. В случае readonly List нет проблемы "добавили String", поэтому передавать можно б) заменить на fun<T> ... в) suppress unchecked cast (так себе вариант, но встречается на стыке API)
Спасибо. Вариант с <T> подошел. Попробывал с @SuppressWarnings("unchecked"), просто ради эксперимента, и все равно не разрешает. Или может аннотация неправильная Про обычный List не знал, что иммутабельный список так может. В таком списке <T> уже не работает, только <Any> и при этом может в нем быть все что годно. Вот это я не понял, конечно...
Чтобы suppress сработало, нужно сначала сделать unchecked cast. Вызывать функцию нужно вот так: foo(list as Any as MutableList<…>) 🙂 Но так делать нужно только в крайних случаях. У меня на смежную тему заметка есть: https://gist.github.com/vlsi/3e7c6a0aa3f13ec0cfc94c0f7447ceb7
гист использовать, как блог это 5 👍
Обсуждают сегодня