注:本文学习源自:DT大数据梦工厂(微信公众号:DT_Spark)
在Scala中,我们通常都会使用类似函数调用的语法。举例来说,如果s是一个字符串,那么s(i)就是该字符串的第i个字符。(而在java中,你会这样写:s.charAt(i)。)在IDEA中运行如下代码:
println(“Hello(4)”)//将打印出’o’
你可以把这种用法当做是()操作符的重载形式,它背后的实现原理是一个名为apply的方法。举例来说,在StringOps类的文档中,你会发现这样一个方法:
def apply(n : Int) : Char
也就是说,”Hello”(4)是如下语句的简写:
“Hello”.apply(4)
如果你去看BigInt伴生对象的文档,就会看到让你将字符串或数字转换为BigInt对象的apply方法。举例来说,如下调用
BigInt(“1234567890”)
是如下语句的简写:
BigInt.apply(“1234567890”)
这个语句产生出一个新的BigInt对象,不需要使用new。例如:
BigInt(“1234567890”) * BigInt(“1234567890”)
像这样使用伴生对象的apply方法是scala中构建对象的常用方法。例如,Array(1,4,3,4)返回一个数组,用的就是Array伴生对象的apply方法。
下面我来做一个练习:
运行结果:
再看一个练习:
1、新建一个类:
2、额外提一点,放在object对象中的方法都是静态方法,如下所示:
运行结果:
3、接下来看一下apply方法的使用:
运行结果:
上面代码当中,我们使用“val a = ApplyTest1()”的使用会导致apply方法的调用并返回该方法调用的值,也就是ApplyTest的实例化对象。
Class中也可以由apply方法,其使用方法如下所示:
运行结果:
由于object中的方法和属性都是静态的,所以就是单例对象的理想载体,实例代码如下所示:
换句话说,object本身就是一个单例对象。
参考资料:
DT大数据梦工厂微信公众号:DT_Spark
时间: 2024-10-01 04:35:26