为什么Kotlin不使用`List(…)`作为所有抽象集合的列表和类似约定的工厂?
在Scala中,使用伴侣对象的apply
方法通过伴侣对象提供了一个收集工厂方法。 所以,如果我想用元素1,2和3创建一个列表,我只需要使用List(1, 2, 3)
。 该模式在所有集合types中都是一致的。
在Kotlin中,如果我写List(1, 2, 3)
我会得到一个编译错误。 要创建一个列表1,2和3,必须使用listOf(1, 2, 3)
。 List
是一个接口,所以显然没有构造函数。 可能有一个伴侣对象,但没有一个。 有一个List
函数,虽然签名不同于人们期望来自Scala( public inline fun List(size: Int, init: (index: Int) -> T): List
)的签名。
那么,为什么Kotlincollections品库设计师选择不遵循与Scala类似的collections品工厂的统一惯例?
有一个“统一约定”:使用Kotlin标准库函数listOf
, arrayOf
, arrayOf
等,如文档中所述:
Kotlin没有用于创建列表或集合的专用语法结构。 使用标准库中的方法 ,如
listOf()
,mutableListOf()
,setOf()
,mutableSetOf()
我不确定为什么Scala方法会更好。 如果你喜欢那些类似构造函数的函数,创建它们并不是什么大不了的事情:
fun List (vararg e: T) = listOf(e) //use it val l = List(1, 2, 3, 4)