Scala中的apply方法
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方法相关推荐
- scala中的split方法
scala中的split方法 1.对split方法的细节观察 scala> val s = "eggs, milk, butter, Coco Puffs" s: Strin ...
- 一文搞懂Pandas Dataframe中的apply方法
告诉你如何在Pandas数据框架中使用apply()的方法. 扫码关注<Python学研大本营>,加入读者群,分享更多精彩 热点 在这篇文章中,我们将探索如何在DataFrame中使用ap ...
- 关于学习java函数式接口Function中的apply方法的一些感悟
起因是这样的,学习函数式编程的时候学到了Function接口,对于其中的apply方法感到不解,下面贴上我的不解代码 在这里插public class Function接口 {public stati ...
- java apply 函数_Js(Javascript)中的apply方法的使用
Function.apply(obj,args)方法能接收两个参数,简单说apply方法作用就是给类或方法中的this赋值.所以学会这个方法首先要知道this的作用.(this的用法可以看一下这个链接 ...
- panda中的apply()方法介绍
1.apply()说明 作用范围:pandas中的Series和DataFrame 作用:通过使用apply()方法,我们可以调用自己定义的函数,使得代码结构更加清晰,简洁. 2.apply()的应用 ...
- Scala类的定义,主/辅构造器,以及方法中的变量定义,单例对象,伴生对象,Apply方法调用,应用程序对象
1. 类 1.1. 类的定义 package cn.toto.scala.day2/*** 在Scala中,类并不用声明为public类型的.* Scala源文件中可以包含多个类,所有这些类都具有共有 ...
- (四)Scala中apply的应用
class & object 概述:apply方法用于在Scala创建对象时,免new的操作,使代码更加简洁优雅 具体操作测试方法: class 和 object 可以类名相同. class ...
- scala 当前日期_如何在Scala中检查当前日期和时间?
scala 当前日期 Scala is a general-purpose programming language, which is majorly used for data manipulat ...
- 伴生对象-apply方法
在伴生对象中定义apply方法,可以实现:类名(参数)方式来创建对象实例` object ApplyDemo01 {def main(args: Array[String]): Unit = {val ...
最新文章
- 修复Eclipse在Mac OSX下启动时卡住问题
- 反射中getDeclaredConstructors和getConstructors两个方法的区别,然后setAccessible什么时候用,作用是什么?
- kaggle (自杀分析)
- 飞鸽传书2007绿色版的发展
- Java代码:调用外部接口(使用Json格式传递参数)的方法
- 02. Django基础:Django项目结构
- 计算机科学导论5版答案,5计算机科学导论习题答案.doc
- 幼儿-综合素质【1】
- mysql 取首字母_MySQL中获取拼音首字母的方法
- 10行代码实现抽奖助手自动参与抽奖
- HDU 4699 Editor (对顶栈)
- js循环/迭代/遍历有多少方法
- 微软开源自有云服务器专属 Linux 发行版 CBL-Mariner,可在 GitHub 免费下载!
- 2019 校内赛 RPG的地牢猎手(bfs+优先队列)
- Google创始人佩奇和布林简介
- ISO14001是什么?
- 根据列名提取指定列 shell awk
- java生成电子发票_C#/Java 动态生成电子发票
- python命令行无法使用退格键、方向键
- UML类图概要——《大话设计模式》读书笔记