1.apply的场景

Scala中实例化一个类,可以不用new , 其原因 其实就是 apply 方法,具体原因 后边再讲:

在上句中Scala 生成Array对象, 会自动去调用 Array 这个伴生对象的 伴生类中的apply方法,

Scala中apply方法 最大的特点就是 当一个实例化的类对象后边跟小括号(),并在小括号中传递了参数,  那么Scala会自动去该 类中找apply方法执行,ps:这个apply方法的参数要与 实例化对象后边小括号内的参数一致

eg:

class ApplyTest {def apply(name:String): Unit ={printf("called apply method , and name is %s",name)}
}
val test = new ApplyTest
test("张三") //会自动调用 apply方法

输出:

2.然后看下apply方法的调用约定:

即 如果我们让一个类的实例化对象  或者一个单例对象,后边直接跟一个小括号并在括号中传递参数, eg:  类实例(参数) 或  单例对象(参数)   ,

这种写法出现时,Scala会自动在该对象中 查找apply 方法,而且这个apply方法的参数和 调用时候写的 参数一致 (即:参数个数和类型一致)

eg:

class ApplyTest {def apply(name:String): Unit ={printf("called apply method , and name is %s",name)}
}
val test = new ApplyTest
test.apply("张三")

输出:

3.apply 可以用来干嘛

最主要的是 结合伴生对象,利用伴生对象 是object单例静态对象 不用实例化,来构建工厂模式,创建实例化对象。即实现: "  val 实例对象 =  类名(参数)  "    这种函数式编程的风格实现 实例化对象,

可以不用Java面向对象式的  " 类名 实例名 = new 类名() ", 这就体现了Scala的  面向对象和 函数编程 的融合

伴生对象,其实就是一个与实体类名称相同的 object 单例对象

伴生对象 详细说明:https://blog.csdn.net/hzp666/article/details/115863497

4.Scala中使用apply方法  实现函数式编程方式  实例化对象

eg1:

class ApplyTest(name:String){def speak(){val name = this.nameprintln(name+"is speaking")}}
object ApplyTest{def apply(name:String): ApplyTest ={new ApplyTest(name)}}
val p1 = ApplyTest("张三")
p1.speak()

输出:

eg2:

5.Scala融合了面向对象 和 函数式编程

eg:

def add = (x:Int, y:Int) => x+yprintln("这里没有调用apply", add(1,2))
println("这里调用 apply:",add.apply(2,3))

输出:

不需要去写apply方法, 系统会自动支持apply写法

ps: 但是 在实例化类 中 有两种方法,1. 要么在伴生对象中 定义好apply方法  2. 在class 前加 case ,这样系统会自动生成 apply方法

eg1:  还是自定义 apply

eg2: 使用case  让系统自动生成apply

case class Dog(val name:String){def bark(): Unit ={println("dog is wangwang")}
}val daHuang = Dog("daHuang")
daHuang.bark()

输出:

Scala中的apply方法相关推荐

  1. scala中的split方法

    scala中的split方法 1.对split方法的细节观察 scala> val s = "eggs, milk, butter, Coco Puffs" s: Strin ...

  2. 一文搞懂Pandas Dataframe中的apply方法

    告诉你如何在Pandas数据框架中使用apply()的方法. 扫码关注<Python学研大本营>,加入读者群,分享更多精彩 热点 在这篇文章中,我们将探索如何在DataFrame中使用ap ...

  3. 关于学习java函数式接口Function中的apply方法的一些感悟

    起因是这样的,学习函数式编程的时候学到了Function接口,对于其中的apply方法感到不解,下面贴上我的不解代码 在这里插public class Function接口 {public stati ...

  4. java apply 函数_Js(Javascript)中的apply方法的使用

    Function.apply(obj,args)方法能接收两个参数,简单说apply方法作用就是给类或方法中的this赋值.所以学会这个方法首先要知道this的作用.(this的用法可以看一下这个链接 ...

  5. panda中的apply()方法介绍

    1.apply()说明 作用范围:pandas中的Series和DataFrame 作用:通过使用apply()方法,我们可以调用自己定义的函数,使得代码结构更加清晰,简洁. 2.apply()的应用 ...

  6. Scala类的定义,主/辅构造器,以及方法中的变量定义,单例对象,伴生对象,Apply方法调用,应用程序对象

    1. 类 1.1. 类的定义 package cn.toto.scala.day2/*** 在Scala中,类并不用声明为public类型的.* Scala源文件中可以包含多个类,所有这些类都具有共有 ...

  7. (四)Scala中apply的应用

    class & object 概述:apply方法用于在Scala创建对象时,免new的操作,使代码更加简洁优雅 具体操作测试方法: class 和 object 可以类名相同. class ...

  8. scala 当前日期_如何在Scala中检查当前日期和时间?

    scala 当前日期 Scala is a general-purpose programming language, which is majorly used for data manipulat ...

  9. 伴生对象-apply方法

    在伴生对象中定义apply方法,可以实现:类名(参数)方式来创建对象实例` object ApplyDemo01 {def main(args: Array[String]): Unit = {val ...

最新文章

  1. 修复Eclipse在Mac OSX下启动时卡住问题
  2. 反射中getDeclaredConstructors和getConstructors两个方法的区别,然后setAccessible什么时候用,作用是什么?
  3. kaggle (自杀分析)
  4. 飞鸽传书2007绿色版的发展
  5. Java代码:调用外部接口(使用Json格式传递参数)的方法
  6. 02. Django基础:Django项目结构
  7. 计算机科学导论5版答案,5计算机科学导论习题答案.doc
  8. 幼儿-综合素质【1】
  9. mysql 取首字母_MySQL中获取拼音首字母的方法
  10. 10行代码实现抽奖助手自动参与抽奖
  11. HDU 4699 Editor (对顶栈)
  12. js循环/迭代/遍历有多少方法
  13. 微软开源自有云服务器专属 Linux 发行版 CBL-Mariner,可在 GitHub 免费下载!
  14. 2019 校内赛 RPG的地牢猎手(bfs+优先队列)
  15. Google创始人佩奇和布林简介
  16. ISO14001是什么?
  17. 根据列名提取指定列 shell awk
  18. java生成电子发票_C#/Java 动态生成电子发票
  19. python命令行无法使用退格键、方向键
  20. UML类图概要——《大话设计模式》读书笔记

热门文章

  1. Android PackageManager
  2. JS switch case语句详解
  3. 互金信用评分建模四步骤
  4. 机器学习——学习路线图
  5. 单元格内多个姓名拆分成一列_一个单元格的内容如何拆分成多个单元格
  6. Wireshark抓包分析基础
  7. RabbitMQ 之死信队列
  8. 什么是金山文档轻维表?如何根据日期自动提醒发送表格中的内容?
  9. 软件过程模型:从瀑布到敏捷——漫画解读软件开发模式变迁史
  10. 磁盘bitlocker上锁解决方法