大三寒假学习 spark学习 Scala面向对编程 对象(apply方法与update方法)

Apply方法:

  大三寒假学习 spark学习 Scala面向对编程 对象(apply方法与update方法)

  • Scala自动调用Array类的伴生对象Array中的一个称为apply的方法,来创建一个Array对象myStrArr。
  • apply方法调用约定:用括号传递给类实例或单例对象名一个或多个参数时,Scala 会在相应的类或对象中查找方法名为apply且参数列表与传入的参数一致的方法,并用传入的参数来调用该apply方法。

  下面为代码示例

class TestApplyclass {
    def apply(param: String): String ={
        println("apply method called,parameter is:" +param)
     "Hello wor1d !" } } val myobject = new TestApplyclass println(myobject( "param1"))

大三寒假学习 spark学习 Scala面向对编程 对象(apply方法与update方法)

 

在单例对象中定义apply方法:

object TestApplysingleobject {
    def apply(param1:String,param2: String): String = {
        println( "apply method called")
        param1 +" and " + param2
    }
}
val group =TestApplysingleobject("Zhangfei", "Liubei")
println(group)

大三寒假学习 spark学习 Scala面向对编程 对象(apply方法与update方法)

 

可以看出,在执行TestApplySingleObject("Zhangfei" , "Liubei")时调用了apply方法,并且把“Zhangfei and Liubei”作为返回值,赋值给group变量,因此,println(group)语句会打印出“Zhangfei and Liubei"

 

 

 伴生类和伴生对象中的apply:

class TestApplyClassAndObject {}
class ApplyTest{
    def apply() = println("apply method in class is called! ")
    def greetingofclass: Unit ={
        println("Greeting method in class is called.")
    }
}
object ApplyTest{
    def apply()={
        println("apply method in object is called")
        new ApplyTest()
    }
}
object TestApplyClassAndObject{
    def main (args: Array [String]){
        val a= ApplyTest()//这里会调用伴生对象中的apply方法
        a.greetingofclass
        a()//这里会词用伴生类中的apply方法
    }
}

大三寒假学习 spark学习 Scala面向对编程 对象(apply方法与update方法)

  从上面代码可以看出,当我们执行val a = ApplyTest(0时,会导致apply方法的调用并返回该方法调用的值,也就是ApplyTest的实例化对象。当执行a()时,又会导致调用伴生类的apply方法,如果我们愿意,就可以在伴生类的apply方法中写入一些处理逻辑,这样就可以把传入的参数赋值给实例化对象的变量

 

update方法:

  当对带有括号并包括一到若干参数的对象进行赋值时,编译器将调用对象的update方法,在调用时,是把括号里的参数和等号右边的对象一起作为update方法的输入参数来执行调用

  大三寒假学习 spark学习 Scala面向对编程 对象(apply方法与update方法)

  从上面可以看出,在进行元组赋值的时候,之所以没有采用Java中的方括号myStrArr[O]而是采用圆括号的形式,myStrArr(O),是因为存在上述的update方法的机制

 

上一篇:02 创建基于Maven的Web项目


下一篇:call、apply、bind