所谓隐式参数指的是,我们的函数或者方法中的参数可以有隐式值,或者说是默认值。通过提供隐式参数,我们在调用函数的时候,可以不提供参数,scala会自动去查找隐式值,当然隐式值也是需要我们提供的。

在Scala中,如果我们的方法定义的参数列表以implicit开头,则方法参数列表中的参数都是隐式参数。在提供了隐式值的情况下,我们调用方法时,不需要提供参数。

1、入门案例object ImplicitDemo {

//隐式值

implicit val xx: String = "tianshouzhi"

implicit val yy: Int = 25

//隐式参数

def test(implicit name: String, age: Int) {

println("name:" + name + ",age:" + age)

}

def main(args: Array[String]): Unit = {

test//注意没有携带参数

}

}

运行程序的结果为:name:tianshouzhi,age:25

可以看到了,方法的参数列表加了implicit之后,会自动查找隐式值,隐式值同样以implicit开头。

2、Scala是如何为隐式参数提供隐式值的?

Scala是通过类型检查来为隐式参数提供默认值。因为在test方法中的参数,一个是String类型,一个是Int类型,而我们提供的2个隐式值分别为implicit val xx: String = "tianshouzhi" //String类型

implicit val yy: Int = 25 //Int类型

因为提供的隐式值类型刚好能匹配上,因此调用的时候可以不传递参数。

此外,需要注意的是, 因为是按照类型进行匹配的。所以隐式参数列表中相同类型的参数,都会被赋予同样的值。例如,我们修改test方法//增加address参数

def test(implicit name: String, age: Int,address:String) {

println("name:" + name + ",age:" + age+",address:"+address)

}

修改后的方法有2个String类型的参数,而隐式值是按照参数类型进行匹配的,因此这两个String类型的参数的隐式值都是"tianshouzhi"。

读者可以运行程序进行测试name:tianshouzhi,age:25,address:tianshouzhi

如果隐式参数列表中,只要有一个参数没有默认值,那么我们在调用的时候,就必须要传递所有的参数。假设,一个方法接受五个不同的类型的隐式参数,即使我们提供了4种类型的隐式值,因为还有一种类型没有隐式值,我们在调用函数的时候也需要提供所有的参数。

那么如果我们只能提供参数列表中部分的隐式值。但是又只想提供没有隐式值的那个类型的参数,改怎么办?此时应该使用柯里化函数。如object ImplicitDemo {

//隐式值

//  implicit val xx: String = "tianshouzhi"

implicit val yy: Int = 25

//隐式参数

def test( name: String)(implicit age:Int){

println("name:" + name + ",age:" + age)

}

def main(args: Array[String]): Unit = {

test("tianshouzhi")

}

}

需要注意的是,柯里化后的函数,必须要将不能提供隐式值的参数,放到方法的参数声明的最前面。以下的这种声明方式是错误的//隐式参数

def test(implicit age:Int)( name: String){

println("name:" + name + ",age:" + age)

}

因为违反了规定,name没有隐式值,确放到了方法参数的列表的最后面。

java隐式参数的作用_隐式参数_scala教程_田守枝Java技术博客相关推荐

  1. java jta_JTA规范_分布式事务教程_田守枝Java技术博客

    JTA规范事务模型 Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分 ...

  2. hive java udf_UDF_Hive教程_田守枝Java技术博客

    UDF是User-Defined Functions(用户定义函数)的简称. 通过以下命令可以查看HIVE中函数的相关文档:SHOW FUNCTIONS; DESCRIBE FUNCTION ; DE ...

  3. 鸿蒙安装elasticsearch7,安装操作系统_岁寒,然后知松柏之后凋也的技术博客_51CTO博客...

    安装操作系统 了解了主流操作系统后,我们就要开始进入学习之中了,而学习之前,首先得做的就是安装操作系统 接下来就开始进行操作系统安装的步骤吧 linux操作系统安装有两种方式 1.文本安装 优点:可以 ...

  4. 视频教程-大型Java项目视频教程_王勇老师DRP项目教程完整版292集-Java

    大型Java项目视频教程_王勇老师DRP项目教程完整版292集 动力节点王勇老师,CCTV<影响力对话>栏目特约嘉宾,Java培训知名讲师,中国Java培训领军人物,北京动力节点创始人,董 ...

  5. java web论文_(定稿)毕业论文基于JavaWeb技术博客项目的设计论文(完整版)最新版...

    <[毕业论文]基于Java Web技术博客项目的设计论文.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)毕业论文基于Java Web技术博客项目的设计论文(完整版)> ...

  6. python脚本监控网站状态 - 赵海华_运维之路 - 51CTO技术博客

    python脚本监控网站状态 - 赵海华_运维之路 - 51CTO技术博客 python脚本监控网站状态 2013-01-09 09:21:02 标签:监控 python 原创作品,允许转载,转载时请 ...

  7. 用开源博客系统OneBlog来搭建自己的个人技术博客网站(java版博客系统)

    java版博客系统 一直想搭建一个个人的博客,方便记录和分享一些技术点,在网上也找了一圈,最终在开源中国中发现了一款很不错的java版的博客系统 https://gitee.com/yadong.zh ...

  8. python自我总结笔记、加上一些自己思考_写技术博客那点事(此篇文章 鼓励自己 多思考 多学习 多做 )...

    前言 写文章是一个短期收益少,长期收益很大的一件事情,人们总是高估短期收益,低估长期收益.往往是很多人坚持不下来,特别是写文章的初期,刚写完文章没有人阅读会有一种挫败感,影响了后期创作. 从某种意义上 ...

  9. 响应式瀑布流布局新闻资讯技术博客织梦模板/DedeCMS自适应手机版游戏新闻网站源码下载

    响应式瀑布流布局新闻资讯技术博客织梦模板,DedeCMS自适应手机版游戏新闻网站源码下载.本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围广,不仅仅局限于一类型的企业,游戏新闻.游戏博客类的网 ...

  10. 海尔微型计算机一键还原怎么操作,电脑的一键还原在哪_电脑一键还原详细教程_电脑一键还原怎么操作...

    电脑的一键还原在哪_电脑一键还原详细教程_电脑一键还原怎么操作 电脑的一键还原在哪?这个问题是很多小伙伴都想知道的,电脑是可以自己一键还原的,但是很多小伙伴都不太清楚,那么小编来告诉大家吧. (1)一 ...

最新文章

  1. 独立服务器和虚拟服务器的区别,BlueHost虚拟主机与独立服务器的主要区别
  2. 【Linux系统编程】线程的基本操作
  3. 安卓拒绝服务漏洞分析及漏洞检测
  4. jQuery基础学习笔记(上)
  5. 《Python编程快速上手——让繁琐工作自动化》——2.5 控制流的元素
  6. 为什么你的店铺不赚钱?
  7. 历史chrome(离线)版本下载
  8. 从github安装C++库,makefile、
  9. 阿里巴巴实习生 招聘内推
  10. c语言中实现阶乘的方法,c语言实现阶乘的方法
  11. 支付宝对账单功能开发
  12. 黎曼ζ(2)的导数:ζ'(2)=-1
  13. 免费Web 托管公司遭黑客攻击 1350万用户数据泄露
  14. matlab怎么实现行随机网络,matlab生成随机行走网格 模拟材料生长 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  15. 【SAP GUI Scripting】 入门系列(1)_基本设置
  16. Dan Pitt卸任ONF执行董事
  17. Python项目实战:各种小说姓名生成器
  18. centos 6.5安装步骤
  19. GD32W515系列Wi-Fi MCU资料
  20. node.js ajax语法

热门文章

  1. 计蒜客-----泥塑课(set)
  2. 蓝牙打印 设置打印样式_双编辑模式 打印自由更轻松!——海鸟贴纸打印机蓝牙按键版体验...
  3. 流水灯程序 keil_天问51学习笔记(3):8个任务的uCOS II程序框架
  4. java定时发送_Java 定时发送邮件 | 学步园
  5. php7类型约束,类型约束 - PHP 7 中文文档
  6. 算法: 最大正方形面积221. Maximal Square
  7. 不能忽视的情绪 -- 喜怒哀惧,也不过度关注
  8. Google Code Review代码审查标准
  9. 算法:Design Circular Deque(设计一个双端队列)
  10. linux环境安装ffmepg,Linux centOS下安装FFmpeg