9、scala为什么会有apply方法

目录

 

1.什么时候调用apply()

2.为什么会有apply方法。

3.怎么样使用apply?

4.apply的用途


1.什么时候调用apply()

scala里面我们常常会看到Array(1,2,3),Person()这种省去了new的对象初始化方法。这实际是scala为我们提供的一个语法糖,什么是语法糖呢?就是帮我们做一些转换,使得原来语法复杂,写得不爽得格式变得简单。但本质上还是调用了原来的复杂语法。当我们调用Person()来实例化时,实际上是调用了Person.apply()方法进行实例化。通常我们会在类的伴生对象中定义apply方法,当遇到object(参数1,...参数n)apply方法会被调用.

 

2.为什么会有apply方法。

我们试着理解一下。

scala中,一切函数皆对象,这句话是个关键,假如这有个函数 val func1=(name:String)=>print(name),我们调用这个函数时这样调用:func1(“大宝剑”) 。但我们从对象的角度来讲,应该是以func1.方法名(参数)来调用的,没有func1(参数)这种形式吧。那这个那一切函数皆对象这句话似乎就有点不满足啊,因为这个函数func1不满足对象的方法调用特点。于是呢,apply()便是用来消除这种二义性的,定义了对象中可以使用func1(参数)这种格式的调用,函数就是对象这句话也就满足了

3.怎么样使用apply

在object和class中都可定义apply方法,object的apply方法中最后需要返回伴生类的实例。通过  实例.apply()或实例()-(实际是一种)可以调用class中的apply

举个例子

package wc

class ApplyTest{
  def apply()=println("class apply")

  def haveATry: Unit ={
    println("Have a try on apply")
  }
}
object ApplyTest{
  def apply()={
    println("object apply")
    new ApplyTest
  }
}

object ApplyOperation {
  def main(args:Array[String]): Unit ={
    //调用伴生对象的apply方法,实例化
    val a=ApplyTest()
    a.haveATry
    a();
  }
}

 

输出结果

object apply
Have a try on apply
class apply
 

4.apply的用途

  1.scala中的集合中也定义了apply方法,可用于取出集合中的元素。

2.具有实例化的作用

3.调用实例.apply()方法可再次访问class中的apply

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值