【发布时间】:2020-02-25 15:20:02
【问题描述】:
我是 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()))
}
}
这是构建数据结构的示例。这是构建数据结构的示例。我想知道我是否可以在initListOf 函数中使用进入FunList 类型的泛型。例如:
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? 这只是学术上的好奇心。
【问题讨论】:
标签: generics kotlin functional-programming