说明
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() 方法创建对象,实现方法:
将类的主构造器定义成
private,在其他地方就不能通过构造器创建对象在伴生对象中 创建对象,并返回
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")
}
}