apply方法 Scala学习笔记-面向对象篇

刚入门scala时,发现scalal中很少使用new来产生对象,比如我们在使用Array的时候:

val array:Array[Int] = Array(1,2,3,4,5,6,7,8,9)

你会发现,Array[Int]对象已经莫名其妙的创建好了,这与java是有较大差别的,之所以可以这样创建,是因为scala中存在apply这个方法。

我们先创建一个Test对象,为他声明一个apply方法:

class Test{
  def speak ={
    println("test")
  }
}
object Test{
  def apply() = new Test
}

接下来我们运行:

val test = Test() test.speak

结果会输出speak方法的“test”,说明Test对象已经实例化好了。

这里便是apply方法起了作用:
1.通过类名加括号,我们可以调用object中的apply方法,因此以下三种写法是等效的:

val test = new Test()
val test = Test()
val test = Test.apply() 

2.通过对象加括号调用类中的apply方法,例如在我们想获取array中的第一个元素,可以通过:array(0),来调用,这里便调用了Array class 中的apply方法,而不是object中的。
再举个例子,为Test类再加个方法:

class Test{
  def speak ={
    println("test")
  }
  def apply()={
    println("apply in class")
  }
}

接下来我们调用:

val t = new Test
t()

结果会打印:apply in class,说明通过对象加括号成功调用class中的apply方法。

你可能感兴趣的:(apply方法 Scala学习笔记-面向对象篇)