Я помню, когда я впервые начал с Kotlin, и я был озадачен, когда он сказал что-то вроде «эта переменная изменчива, поэтому безопасное приведение не разрешено», и я понятия не имел, что происходит:)
В любом случае, вы получаете несоответствие типов, потому что язык имеет тип nullability.Таким образом, вы не можете потенциально дать null
indexOf
, потому что он требует, чтобы он был ненулевым Int
.
Если вы проверите исходный код для max()
:
public fun IntArray.max(): Int? {
if (isEmpty()) return null
....
Так что может дать вам null
, и поэтому вы получите
val maxValue: Int? = a.max()
, где вы не можете указать maxValue
в качестве аргумента для indexOf
потому что он ожидает Int
, а не Int?
.
Таким образом, решение состоит в том, чтобы обработать случай null
явно:
return maxValue?.let { a.indexOf(it) } ?: null
Но теперь, основываясь на том, что мы знаемВы могли бы значительно сократить количество строк кода следующим образом:
fun indexOfMax(a: IntArray): Int? = a.max()?.let { a.indexOf(it) }
, который вы позже сможете превратить в функцию расширения:
fun IntArray.indexOfMax(): Int? = max()?.let { indexOf(it) }
Удачи с вашимпутешествие через Котлин.Лично я думаю, что коаны очень раздражают, я предпочел конвертировать код Java в Kotlin, чтобы увидеть, каково это изучать начальные синтаксические особенности.