在前面说过了Class,Object,伴生对象和构造器。
Scala中如果一个Class和一个Object同名,则称Class是Object的伴生类。Scala没有Java的Static修饰符,Object下的成员和方法都是静态的,类似于Java里面加了Static修饰符的成员和方法。
基于前面的基础,接下来就说一下scala中一个很有趣的语法糖 apply
Scala 中的 apply 方法
- apply 方法通常是在伴生对象中实现的
- 通常我们会在类的伴生对象中定义 apply 方法,当遇到 类名(参数 1,…参数 n) 时 apply 方法会被调用
- 在创建伴生对象或伴生类的对象时,通常不会使用 new class/class() 的方式,而是直接使用 class(),隐式的调用伴生对象的 apply 方法,这样会让对象创建的更加简洁
- Class和Object都可以定义自己的Apply()方法,类名()调用Object下的Apply()方法,变量名()调用Class下的Apply()方法。
class ApplyTest{
def apply() {
println("This is a class, apply()...")
}
}
object ApplyTest{
def apply() = {
println("This is an object, apply()...")
new ApplyTest()
}
}
object ApplyExample {
def main(args: Array[String]) {
var at=ApplyTest()
at()
}
}
//运行结果:This is an object, apply()...
// This is a class, apply()...
分析:
var at=ApplyTest()
这是类名(),调用的是Object下的Apply()方法,由于此时并没有创建类的对象,所以也只能调用Object下的静态方法。
在object ApplyTest中的
new ApplyTest()
创建了一个类的对象,并且返回给了变量at。
at()
这是变量名(),显然调用的是Class的Apply()方法