scala教程:apply()方法

说明

apply() 是特殊的方法,可以出现在 类 和 object对象 中,可以简化调用,看上去更像 函数,更符合 函数式编程

apply()方法 在 伴生对象中

apply() 是特殊的方法,scala教程:伴生对象的应用场景:工厂模式 例子中的 newInstance() 可以改写成 apply() 方法,可通过 object名字() 调用

看上去更像函数,更符合 函数式编程

应用场景

创建数组就是通过 伴生对象的 apply() 方法

val arr=Array[Int](1,2,3)

伴生对象,全写是:

val arr2=Array.apply[Int](1,2,3)

简单例子

object Std12_apply {

  def main(args: Array[String]): Unit = {
    //全写
    Std12_phone.apply("骁龙")
    //简写,看上去像调用一个函数,本质是在调用 Std12_phone 的 apply方法
    Std12_phone("骁龙")

  }
}
object Std12_phone {

  def apply(cpu:String) = println(cpu)
}

例子

有时,不想通过 new 类() 创建对象,而是通过 object 的 applay() 方法创建对象,实现方法:

  1. 将类的主构造器定义成 private,在其他地方就不能通过构造器创建对象

  2. 在伴生对象中 创建对象,并返回

object Phone {

  def apply(cpu:String) = {
    println("cpu:"+cpu)
    new Phone(cpu)
  }
}

class Phone private(var cpu:String){

  def call(num:String)={
    println("打电话给"+num)
  }
}
object Test {

  def main(args: Array[String]): Unit = {
    val iphone = Phone.apply("A14")
    val xiaomi = Phone("骁龙888") // apply() 方法的好处
    iphone.call("666")
    xiaomi.call("777")
    // 不想通过 new 创建对象
//    val xiaomiPhone = new Phone()
  }
}

apply()方法 在 伴生类中

apply() 方法也可以出现在 伴生类中,可通过 对象名() 的方式调用

看上去更像函数,更符合 函数式编程

应用场景

访问数组元素,即:arr(0),就是通过 类的 apply() 方法实现的

例子

class Phone private(var cpu:String){

  def call(num:String)={
    println("打电话给"+num)
  }

  def apply(num:String) = call(num)
}
object Test {

  def main(args: Array[String]): Unit = {
    val xiaomi = Phone("骁龙888") // apply() 方法的好处
    // 调用 apply() 方法,该方法又调用 call() 方法
    xiaomi("119")
  }
}

原文出处:/show_1IX1DOvSTSCi.html