当前位置:

首页 > 编程开发 > Java Scala之模式匹配与隐式转换的方法是什么

Java Scala之模式匹配与隐式转换的方法是什么

模式匹配:Scala中的模式匹配相当于Java中的switch在Java中我们有switchcasedefault这三个组成的基础语法,在Scala中我们是有match和case组成default的作用由case代替基础语法如下:vala=10valb=20varc='+'cmatch{case'+'=>println(a+b)case'-'=>println(a-b)case_=>println("错误的运算符")}在Scala中是默认从这个case执行到

本文目录

      模式匹配:

      Scala中的模式匹配相当于Java中的switch

      在Java中我们有switch  case default 这三个组成的基础语法,在Scala中我们是有match  和 case组成  default的作用由case代替

      基础语法如下:

      val a=10
          val b=20
          var c='+'
          c match {
            case '+'=> println(a+b)
            case '-'=> println(a-b)
            case _  =>println("错误的运算符")
          }

      在Scala中是默认从这个case执行到下一个case的  

      case _  是代表上述情况都不满足

      模式守卫:

      如果想要表达匹配某个范围的数据,就需要在模式匹配中增加条件守卫

      (其实是在case中添加if判断)

       val x=3.153
          val value: Any = x match {
            case i: Double if i >= 0 => i
            case j: Double if j < 0 => -j
            case _ => "type illegal"
          }

      类型匹配:

      在定义函数时 参数为所有对象的父类Any

       def function(x:Any): Unit ={
            x match {
              case s:String =>println("字符串")
              case i:Int=>println("整数")
              case d:Double=>println("小数")
              case _ =>println("其他")
            }
          }

      对象匹配

      对象的匹配是比较复杂的,单纯的比较是比较的地址值,两个变量的地址值是肯定不同的

      object Test_03MatchObject {
        def main(args: Array[String]): Unit = {
          val sss: person1 = person1("sss", 1)
        sss match {
          case person1("sss",1)=>println("victory")
          case _=>println("defite")
        }
        }
        class person1(val name: String,val age :Int){
        }
        object person1{
          def apply(name: String, age: Int): person1 = new person1(name, age)
          def unapply(arg: person1): Option[(String, Int)] =
            if (arg==null)
            {
              None
            }
            else{
              Some(arg.name,arg.age)
            }  }
      }

      这里我们在object中定义了unapply方法   unapply方法相当于apply方法的逆应用,apply方法是在object中创建对象,而unapply方法是提取方法,提取操作的对象(传入的参数为对象,根据对象进行提取数据存入Some,与自己的传入的数据进行比较)这个方法也是和apply方法一样不用写方法名。

      该方法主要用于解析对象(匹配对象)

      样例类:

      样例类中的主属性默认为val如果需要使用var则需要自己标注

      样例类会自动生成unapply与apply等方法   节省了大量代码

      把上述的class与object注释后新建样例类:(大量使用)

        case class person1(val name: String,val age :Int)

      偏函数:

      偏函数的化简写法:

      我们可以直接调用collect函数进行调用偏函数参数直接写case+你需要的操作

      化简写法相当于省掉了match,作用相当于 filter+map

      在使用map的场景下也能使用偏函数

      偏函数的使用:
          val list = List(List(1, 2, 3, 4), List(1), List(8, 5))
          val list1: List[Int] = list.collect({ case List(x, y, _*) => y })
        println(list1)

      隐式转换:

      官方定义:

      当编译器第一次编译失败的时候,会在当前的环境中查找能让代码编译通过的方法,用

      于将类型进行转换,实现二次编译

      个人理解:

      隐式转换是我们在对一个对象调用它所在的类中没有的函数时发生错误所进行的操作

      隐式函数:

      隐式转换的步骤:

      (1)需要现在下边定义一个目标类  在类中定义所调用的方法与逻辑

      eg:我们对Int类型数据调用一个不存在的方法:

      class MyRichInt(val self :Int)
        {
      def myMax(int: Int):Int =
          {
            if (int>self)
              int
              else
              self
          }
        }

      (2)在main函数中定义转换器

      在开头要引入 ----   implicit 隐式转换的函数再进行定义

       implicit def changeInt(self:Int)  =
          {
      new MyRichInt(self)
          }

      当隐式转换的的方法相同与自身方法冲突,会使用自身的方法(因为不会编译失败---隐式转换的官方定义)

      隐式参数:

      在定义函数时我们已经知道了参数默认值  但是调用的时候我们需要加上括号

      在这里我们引入了新概念   隐式参数

      参数对比样例:
         implicit val name:String="lisi"
          def sayhi(implicit name: String="sd"): Unit =
          {
            println(s"hi $name")
          }
         sayhi
         sayhi()

      参数默认值只是在调用函数的后边加一个括号

      运行结果:

      Java Scala之模式匹配与隐式转换的方法是什么

      隐式类:

      在普通类的前面添加关键字implicit会自动转换成隐式类

      如果隐式转换的目标类转换成隐式类 则不需要在main函数中new隐式类的

      可以直接调用指定函数

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Java
      相关文章 更多
      Java单元测试入门:使用JUnit 5编写第一个测试用例
      Java单元测试入门:使用JUnit 5编写第一个测试用例

      面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

      Java变量未初始化报错解析:局部变量与成员变量默认值差异
      Java变量未初始化报错解析:局部变量与成员变量默认值差异

      深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

      Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
      Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

      详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

      Java中final与static final常量的定义及初始化规则
      Java中final与static final常量的定义及初始化规则

      深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

      Java抽象方法与接口方法的区别及选型建议
      Java抽象方法与接口方法的区别及选型建议

      深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

      Java实现HTTP请求与JSON解析的完整代码示例
      Java实现HTTP请求与JSON解析的完整代码示例

      本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

      Java递归出现StackOverflowError的原因分析及栈空间优化方案
      Java递归出现StackOverflowError的原因分析及栈空间优化方案

      详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

      Java空指针异常(NPE)的代码排查与修复实例
      Java空指针异常(NPE)的代码排查与修复实例

      针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

      selenium上传文件教程本地文件路径设置方法
      selenium上传文件教程本地文件路径设置方法

      深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

      针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。