我知道Scala List可以创建为:
val l = List(1,2,3)
执行上述语句时,幕后发生了什么?这里调用apply方法吗?
根据scala文档:对于序列,apply是位置索引http://docs.scala-lang.org/overviews/collections/seqs.html
那么,是否有2个apply方法,一个用于位置索引,另一个用作对象创建的工厂方法?
这个调用实际上将伴随对象上的apply方法调用到List
类。
许多scala类都有一个伴随对象,它是一个与该类同名的单例对象。在此伴随对象上定义方法是scala等效于java的静态方法。这些伴随对象通常具有一个或多个apply方法,这些方法用作构造函数/工厂函数来创建类的实例。在这种情况下,List
对象有一个方法,它采用相同类型的可变数量的参数,并创建这些对象的List
。
事实上,如果你定义一个case class
,scala会自动定义一个伴随对象,除其他外,包括和apply方法,它接受与case类的构造函数相同的参数,这就是你在构造时不需要使用new
的原因。案例类。
list实例还有一个apply方法,用于索引列表,但由于它是在List类中定义的,它只适用于类的实例,而不是对象List
本身。