Я новичок в Kotlin и изучаю эту книгу.
Функциональный Kotlin: Расширьте свои навыки OOP и внедрите функциональные техники в Kotlin и Arrow
Эта книга содержит следующие коды:
sealed class FunList<out T> {
object Nil: FunList<Nothing>()
data class Cons<out T>(val head: T, val tail: FunList<T>): FunList<T>
}
fun initListOf(vararg numbers: Int): FunList<Int> {
return if (numbers.isEmpty()) {
Nil
} else {
Cons(numbers.first(), initListOf(*numbers.drop(1).toTypedArray().toIntArray()))
}
}
Это пример построения структуры данных. Это пример построения структуры данных. Я задавался вопросом, могу ли я использовать обобщенный c типа, который входит в FunList
в initListOf
функцию. Например:
fun <T> initListOf(vararg items: T): FunList<T> = if (items.isEmpty()) {
Nil
} else {
Cons(items.first(), initListOf(*items.drop(1).toTypedArray())) // error
}
Но код не работает. Причина в том, что если я поместил фактор того же типа в параметр varag, он был преобразован в IntArray
, FloatArray
, LongArray
и CharArray
, который был распознан как тип, отличный от TypedArray
( Array<T>
).
Как заставить их автоматически создавать один и тот же тип FunList, когда я помещаю переменную того же типа? Это просто академи c любопытство.