全部版块 我的主页
论坛 数据科学与人工智能 大数据分析 spark高速集群计算平台
2370 0
2016-03-16
二、Scala中的Object实战详解


object

定义一个类同名的object对象,里面存放静态的成员或者方法,把该object对象称之为该类的伴生对象

175233mvgel8yzmpmj5exb.png

图3

在图3中,SparkContextobjectSparkContext的伴生对象,里面存放一系列静态的成员和静态的方法。而且,当我们第一次

调用SparkContext时,SparkContext伴生对象会被执行一次,仅此一次。下面是一个示例:

1753244ecrcloje9cpjb9l.png

4

图4中object Personclass Person的伴生对象,class Person称之为object Person的伴生类。伴生对象适合在里面定义一些工具方法,以及存放一些全局唯一的常量,节省空间。


//第一次调用:Person伴生对象的getSalary方法

//此时,我们发现:Person伴生对象被初始化,打印出字符串Scala

scala> Person.getSalary

Scala

res34: Double = 0.0


//第二次调用:Person伴生对象的getSalary方法

//此时,我们发现:Person伴生对象不再需要初始化,没有打印出字符串Scala

scala> Person.getSalary

res35: Double = 0.0

以上示例中确实验证了:伴生对象会被执行一次,仅此一次。

Scala中,我们在定义类的对象时, 一般都不会用new类名,再传入参数的方式来定义。而是直接用类名,或者类名加参数的方式。例如,我们重温下面的示例:

我们构造一个数组,其实是调用Array的伴生对象object Arrayapply方法。

scala> val array=Array(1,2,3)

array: Array[Int] = Array(1, 2, 3)


scala> val array=Array.apply(1,2,3)

array: Array[Int] = Array(1, 2, 3)

以上两种定义数组的方式效果是一样的。apply方法就是当前类的伴生对象的工厂方法。延伸一下,Java水平比较高的编程人员,在构造Java对象时,一般来说不会直接new一个类,而是通过工厂方法模式来创建。而Scala语言中,天生就支持这次模式,所以在具体类对象构造时,一般都是在伴生类的伴生对象的apply方法中去实现!这样可以控制对象的生成。



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群