为何创建Seq实例得到List?解析Scala背后的实现机制
Scala中Seq()返回List实例的实现机制
你看到的Seq[Int]()并非直接初始化Seq trait(毕竟trait确实无法直接实例化),这背后是Scala的语法糖和伴生对象设计在起作用:
- 语法糖的实际映射:
Seq[Int]()这种写法是Scala的语法糖,实际调用的是Seq伴生对象的apply方法,也就是Seq.apply[Int](),而非尝试构造trait的实例。 - 伴生对象的默认实现选择:Scala标准库中,Seq的伴生对象
apply方法被设计为返回List实例——List是不可变Seq的轻量、高效默认实现,完全符合Seq的抽象定义。不管是空序列Seq()还是带元素的Seq(1,2,3),默认都会生成List实例。 - 指定其他实现的方式:如果需要使用Vector、ArrayBuffer等其他Seq实现,直接调用对应类的构造方法即可,比如
Vector[Int](),也可以通过Seq.newBuilder[Int].result()这种方式指定构建器生成目标实例。
内容的提问来源于stack exchange,提问作者buqing
相关产品推荐
相关产品推荐

