Scala--apply方法

apply方法是scala中独有的,当对象以函数的方式进行调用时,scala会隐式地将调用改为在该对象上调用apply方法

在java中需要用到new来创建新的对象,例如:

 ArrayList<String> str = new ArrayList<>();

在Scala中不需要用new就可以直接创建新的对象

val arr =Array("jack","lucy")

这里涉及到apply方法。当采用这种方式声明一个数组的时候,Scala会自动调用Array这个类的伴生对象Array中的apply方法,

apply方法调用:用括号传递给类实例或单例对象名一个或多个参数时,Scala会在相应的类或对象中查找方法名为apply且参数列表与传入的参数一致的方法,并用传入的参数来调用该apply方法。从而创建一个数组对象。

首先定义一个类

class hello{
  def apply (name : String): Unit = {
    println("hello\t"+name)
  }
}

在测试类中

    val h = new hello  //如果出现实例名称(有参或无参),就自动调用类中定义的apply方法
    h("world")         //结果:hello	world
    h.apply("world")   //结果:hello	world

在Scala中,我们把所有类的构造方法以apply方法的形式定义在它的伴生对象当中,这样伴生对象的方法就会自动被调用,调用就会生成类对象。

class MyName (name:String) {
  def info (): Unit = {
    println("my name is :"+name)  //调用伴生类Car的构造方法
  }
}

object MyName {  //定义了MyName的伴生对象,这样,我们可以通过调用MyName("str")来创建一个Car实例,而不是使用new关键字。
  def apply(name:String) = new MyName("jack")
}


object NameTest {

    def main(args:Array[String]){
      val myName = MyName("jack") //调用伴生对象中的apply方法
      myName.info() //输出结果为"my name is :jack"

  }
}

Scala之所以用apply方法是为了保持它的对象和函数之间使用的一致性,因为Scala融合了面向对象和函数式两种编程风格,它是一种混合式的编程。

  • 面向对象调用:对象.方法
  • 函数式调用:函数(参数)
scala> def add = (x:Int,y:Int)=>x+y  //定义函数add
add: (Int, Int) => Int

scala> add(5,5)  //采用函数式调用
res0: Int = 10

scala> add.apply(5,5) add也是对象,也可以采用点号形式调用
res1: Int = 10

Scala中函数式的调用可以转化成对象调用,同理对象调用也可以被转化成函数的调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值