在Scala中,有一种方便的约定,即使用伴随对象的apply
方法通过伴随对象提供集合工厂方法。所以,如果我想创建一个包含元素1,2和3的列表,我只需使用List(1, 2, 3)
。所有集合类型的模式都是一致的。
在Kotlin中,如果我写List(1, 2, 3)
,我会收到编译错误。要创建包含1,2和3的列表,必须使用listOf(1, 2, 3)
。 List
是一个接口,所以它显然没有构造函数。可能有一个伴侣对象,但没有一个。有一个List
函数,但签名不同于Scala(public inline fun <T> List(size: Int, init: (index: Int) -> T): List<T>
)的预期签名。
那么,为什么Kotlin集合库设计者选择不遵循类似于Scala中的集合工厂的统一约定呢?
答案 0 :(得分:13)
为什么Kotlin馆藏设计师选择不遵循收集工厂的统一惯例
有&#34;统一约定&#34;:使用Kotlin标准库函数listOf
,arrayOf
,mapOf
等,如{{ 3}}:
Kotlin没有专门的语法结构来创建列表或集合。 使用标准库中的方法,例如
listOf()
,mutableListOf()
,setOf()
,mutableSetOf()
我不确定为什么Scala方法会更好。如果你想拥有那些类似于构造函数的函数,创建它们并不是什么大事:
fun <T> List<T>(vararg e: T) = listOf(e)
//use it
val l = List(1, 2, 3, 4)