scala隐式转换[通俗易懂]

scala隐式转换[通俗易懂]简述:1:通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性减少代码量,忽略那些冗长的代码。2:我们经常引入第三方库,但当我们想要扩展新功能的时候通常是很不方便的,因为我们不能直接修改其代码。scala提供了隐式转换机制和隐式参数帮我们解决诸如这样的问题。Scala中的隐式转换是一种非常强大的代码查找机制。当函数、构造器调用缺少参数或者某一实例调用了其他类型的方法导致编译不通过时,编译器会尝试搜索一些特定的区域,尝试使编译

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

搬砖

简述:

  1.  通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性减少代码量,忽略那些冗长的代码。
  2.  我们经常引入第三方库,但当我们想要扩展新功能的时候通常是很不方便的,因为我们不能直接修改其代码。scala提供了隐式转换机制和隐式参数帮我们解决诸如这样的问题。Scala中的隐式转换是一种非常强大的代码查找机制。当函数、构造器调用缺少参数或者某一实例调用了其他类型的方法导致编译不通过时,编译器会尝试搜索一些特定的区域,尝试使编译通过。

在之前的章节中有使用到隐式转换:scala 使用jackson解析json成对象       

隐式转换的方式

一个从类型 S 到类型 T 的隐式转换由一个函数类型 S => T 的隐式值来定义,或者由一个可转换成所需值的隐式方法来定义。

隐式转换在两种情况下会用到:

  • 如果一个表达式 e 的类型为 S, 并且类型 S 不符合表达式的期望类型 T。

  • 在一个类型为 S 的实例对象 e 中调用 e.m, 如果被调用的 m 并没有在类型 S 中声明。

第一种情况(将整数转换成字符串类型): 

scala> def log(msg: String) = println(msg)
log: (msg: String)Unit


scala> log("hello world")
hello world


scala> log(123)<console>:9: error: type mismatch;
found   : Int(123)
required: String
              log(123)
                  ^


scala> implicit def int2String(i: Int): String = i.toString
warning: there was one feature warning; re-run with -feature for details
int2String: (i: Int)String


scala> log(123)123

第二种情况 (隐式转换调用类中本不存在的方法)

object Test1 {

  class Student {
    var age: String = "123"
    def modifyAge(a: String): Unit = {
      age = a
    }
  }

  implicit class StudentImplicit(student: Student){
    def studentPrint: String = {
      student.age
    }
  }

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

    val studentScala = new Student
    studentScala.modifyAge("65")
    print(studentScala.studentPrint)
  }
}

scala隐式转换[通俗易懂]

参考: https://www.cnblogs.com/MOBIN/p/5351900.html

https://www.jianshu.com/p/a344914de895

https://docs.scala-lang.org/zh-cn/tour/implicit-conversions.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/184118.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • LSPCI具体解释分析

    LSPCI具体解释分析

  • nacos和eureka的区别 面试_nacos和eureka比较哪个好

    nacos和eureka的区别 面试_nacos和eureka比较哪个好Eureka架构图:Eureka架构图1.服务注册(register):EurekaClient会通过发送REST请求的方式,向EurekaServer注册自己的服务。注册时,提供自身的元数据,比如ip地址、端口、运行状况指标、主页地址等信息。EurekaServer接收到注册请求后,就会把这些元数据信息存储在一个双层的Map中。什么时候注册?在启动微服务的时候。2.服务续约(renew):在服务注册后,EurekaClient会维护一个心跳来持续通知EurekaServer,说明服务一

  • Logstash详解之——filter模块[通俗易懂]

    Logstash详解之——filter模块[通俗易懂]Logstash详解之——filter模块

  • 面试官:说下什么是TCP 的粘包和拆包?

    面试官:说下什么是TCP 的粘包和拆包?

  • axios实现跨域三种方法_cors跨域axios

    axios实现跨域三种方法_cors跨域axios跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。所谓同源是指,域名,协议,端口均相同,浏览器执行js脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。以下举例:(1)http://www.123.com/index.html调用http://www.123.com/server.php(非跨域)(2)…

  • HTML CSS整理笔记[通俗易懂]

    HTML CSS整理笔记[通俗易懂]常见字体单位:1.em移动端常用的字体尺寸单位,说白em就相当于“倍”,比如设置当前的div的字体大小为1.5em,则当前的div的字体大小为:当前div继承的字体大小*1.5。但当div进行嵌套时,em始终按当前div继承的字体大小来缩放。2.remr是root的意思,即相对于根节点html的font-size进行缩放,当有嵌套关系时,嵌套关系的元素的字体大小始终按照根节点的字体大小…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号