0

0

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

WBOY

WBOY

发布时间:2023-05-12 19:25:04

|

1278人浏览过

|

来源于亿速云

转载

    模式匹配:

    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 _  是代表上述情况都不满足

    模式守卫:

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

    立即学习Java免费学习笔记(深入)”;

    (其实是在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)

    隐式转换:

    官方定义:

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

    问小白
    问小白

    免费使用DeepSeek满血版

    下载

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

    个人理解:

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

    隐式函数:

    隐式转换的步骤:

    (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隐式类的

    可以直接调用指定函数

    相关文章

    java速学教程(入门到精通)
    java速学教程(入门到精通)

    java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    Python多线程合集
    Python多线程合集

    本专题整合了Python多线程相关教程,阅读专题下面的文章了解更多详细内容。

    0

    2026.01.21

    java多线程相关教程合集
    java多线程相关教程合集

    本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

    1

    2026.01.21

    windows激活码分享 windows一键激活教程指南
    windows激活码分享 windows一键激活教程指南

    Windows 10/11一键激活可以通过PowerShell脚本或KMS工具实现永久或长期激活。最推荐的简便方法是打开PowerShell(管理员),运行 irm https://get.activated.win | iex 脚本,按提示选择数字激活(选项1)。其他方法包括使用HEU KMS Activator工具进行智能激活。

    1

    2026.01.21

    excel表格操作技巧大全 表格制作excel教程
    excel表格操作技巧大全 表格制作excel教程

    Excel表格操作的核心技巧在于 熟练使用快捷键、数据处理函数及视图工具,如Ctrl+C/V(复制粘贴)、Alt+=(自动求和)、条件格式、数据验证及数据透视表。掌握这些可大幅提升数据分析与办公效率,实现快速录入、查找、筛选和汇总。

    2

    2026.01.21

    毒蘑菇显卡测试网站入口 毒蘑菇测试官网volumeshader_bm
    毒蘑菇显卡测试网站入口 毒蘑菇测试官网volumeshader_bm

    毒蘑菇VOLUMESHADER_BM测试网站网址为https://toolwa.com/vsbm/,该平台基于WebGL技术通过渲染高复杂度三维分形图形评估设备图形处理能力,用户可通过拖动彩色物体观察画面流畅度判断GPU与CPU协同性能;测试兼容多种设备,但中低端手机易卡顿或崩溃,高端机型可能因发热降频影响表现,桌面端需启用独立显卡并使用支持WebGL的主流浏览器以确保准确结果

    4

    2026.01.21

    github中文官网入口 github中文版官网网页进入
    github中文官网入口 github中文版官网网页进入

    github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

    3

    2026.01.21

    windows安全中心怎么关闭打开_windows安全中心操作指南
    windows安全中心怎么关闭打开_windows安全中心操作指南

    Windows安全中心可以通过系统设置轻松开关。 暂时关闭:打开“设置” -> “隐私和安全性” -> “Windows安全中心” -> “病毒和威胁防护” -> “管理设置”,将“实时保护”关闭。打开:同样路径将开关开启即可。如需彻底关闭,需在组策略(gpedit.msc)或注册表中禁用Windows Defender。

    2

    2026.01.21

    C++游戏开发Unreal Engine_C++怎么用Unreal Engine开发游戏
    C++游戏开发Unreal Engine_C++怎么用Unreal Engine开发游戏

    虚幻引擎(Unreal Engine, 简称UE)是由Epic Games开发的一款功能强大的工业级3D游戏引擎,以高品质实时渲染(如Nanite和Lumen)闻名 。它基于C++语言,为开发者提供高效率的框架、强大的可视化脚本系统(蓝图)、以及针对PC、主机和移动端的完整开发工具,广泛用于游戏、电影制片等领域。

    0

    2026.01.21

    Python GraphQL API 开发实战
    Python GraphQL API 开发实战

    本专题系统讲解 Python 在 GraphQL API 开发中的实际应用,涵盖 GraphQL 基础概念、Schema 设计、Query 与 Mutation 实现、权限控制、分页与性能优化,以及与现有 REST 服务和数据库的整合方式。通过完整示例,帮助学习者掌握 使用 Python 构建高扩展性、前后端协作友好的 GraphQL 接口服务,适用于中大型应用与复杂数据查询场景。

    1

    2026.01.21

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Kotlin 教程
    Kotlin 教程

    共23课时 | 2.7万人学习

    C# 教程
    C# 教程

    共94课时 | 7.1万人学习

    Java 教程
    Java 教程

    共578课时 | 48.3万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号