在使用Scala 对象的时候,会经常用到对象的apply 和update 方法,虽然没有在类里面定义,这是因为Scala 自动完成。
一、apply 方法
用括号传递给对象一个或多个参数时,Scala 会把它转换成对apply 方法的调用。通常在伴生对象中实现apply 方法,并在其中实现构造伴生类的对象的功能。创建伴生类的对象时,不再使用new Class 的方法,而是使用Class(参数,参数2,…,参数N)的方式,隐式的调用伴生对象的apply 方法,这样会让对象创建更简洁,Spark中绝大部分对象的创建就是采用这种方式。
Scala 会自动调用伴生对象的apply 方法,并在apply 中完成必要的处理逻辑和对象初始化操作。在Scala 中各种集合对象的生成就是通过apply 方法完成的,比如:
val a = Array(10)
通过Array 类的伴生对象的apply 方法实例化对象数组a,a 中只有一个数组元素为10。关于数组的定义还有如下写法,不要将其搞混:
val b = new Array(10)
数组b 表示的含义是生成一个长度为10 的不可变数组,每个元素的默认值为0。(www.daowen.com)
二、update 方法
当对带有括号并包括若干个参数的对象赋值时,编译器将调用对象的update 方法,把括号里的参数和等号右边的对象一起作为update 方法的输入参数来调用。
当调用stu("Xiaoming") = "zhangsan"和stu.update("Xiaoming", "zhangsan")时都会调用Student 类中定义的update 方法,update 的最后一个参数或者等号右边的值是要更新的值,其他的则为原有数据。
三、main 方法
Java 中如果运行一个程序,需要编写一个main 方法作为程序的唯一入口。Scala中同样需要一个main 方法作为程序的入口。Scala 中的main 方法定义格式为:def main(args: Array[String]),而且必须定义在object 中。
如果要运行上述代码,需要将其放入.scala 文件,然后使用scalac 编译,再用scala 执行:
除了实现main 方法之外,还可以通过继承App Trait 将需要在main 方法中运行的代码,直接作为object 的代码,上述代码可以更改为:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。