目录
1.什么时候调用apply()
scala里面我们常常会看到Array(1,2,3),Person()这种省去了new的对象初始化方法。这实际是scala为我们提供的一个语法糖,什么是语法糖呢?就是帮我们做一些转换,使得原来语法复杂,写得不爽得格式变得简单。但本质上还是调用了原来的复杂语法。当我们调用Person()来实例化时,实际上是调用了Person.apply()方法进行实例化。通常我们会在类的伴生对象中定义apply方法,当遇到object(参数1,...参数n)时apply方法会被调用.
2.为什么会有apply方法。
我们试着理解一下。
在scala中,一切函数皆对象,这句话是个关键,假如这有个函数 val func1=(name:String)=>print(name),我们调用这个函数时这样调用:func1(“大宝剑”) 。但我们从对象的角度来讲,应该是以func1.方法名(参数)来调用的,没有func1(参数)这种形式吧。那这个那一切函数皆对象这句话似乎就有点不满足啊,因为这个函数func1不满足对象的方法调用特点。于是呢,apply()便是用来消除这种二义性的,定义了对象中可以使用func1(参数)这种格式的调用,函数就是对象这句话也就满足了
3.怎么样使用apply?
在object和class中都可定义apply方法,object的apply方法中最后需要返回伴生类的实例。通过 实例.apply()或实例()-(实际是一种)可以调用class中的apply
举个例子
package wc
class ApplyTest{
def apply()=println("class apply")
def haveATry: Unit ={
println("Have a try on apply")
}
}
object ApplyTest{
def apply()={
println("object apply")
new ApplyTest
}
}
object ApplyOperation {
def main(args:Array[String]): Unit ={
//调用伴生对象的apply方法,实例化
val a=ApplyTest()
a.haveATry
a();
}
}
输出结果
object apply
Have a try on apply
class apply
4.apply的用途
1.scala中的集合中也定义了apply方法,可用于取出集合中的元素。
2.具有实例化的作用
3.调用实例.apply()方法可再次访问class中的apply