17 scala case class object

更多干货

  • 分布式实战(干货)

  • spring cloud 实战(干货)

  • mybatis 实战(干货)

  • spring boot 实战(干货)

  • React 入门实战(干货)

  • 构建中小型互联网企业架构(干货)

  • python 学习持续更新

  • ElasticSearch 笔记

  • kafka storm 实战 (干货)

  • scala 学习持续更新

概述

case class

  1. case 类在编译的时候会自动增加一个 单列对象(single object)。

  2. 产生了一个apply的方法,那么我们可以直接把对象当作方法来用,比如 Person(12,Tom),就代表已经创建一个Person的对象,同时调用了這个对象的apply方法

  3. 产生了一个upapply的方法,也就是说在模式匹配的时候可以用case class Person来作为 age和name的提取器

  4. 继承了Product和Serializable(implements Product, Serializable),也就是说已经序列化和可以应用Product的方法

  5. age和name字段都是由final 修饰,也就是说是不可改变的,那么用scala的语言来阐述,那么就是 case class 的参数默认是 immutable类型的。

  6. 也包含了toString,hashCode,copy,equals方法。

case object

  1. case object Person相比于case class Person(age:Int,name:String)缺少了apply、unapply方法,因为case object 是没有参数输入的,所以对于apply 和unapply的方法也自然失去。

  2. 因为class 和 object 在编译的时候,object是只有一个编译文件,而当两者加上case之后发现两者都是有2个编译文件,也就是说case object 不在像object那样仅仅是一个单列对象,而是有像类(class)一样的特性。

  3. 都有toString,hashCode,copy,equals方法和继承了Product和Serializable(implements Product, Serializable)

例子

abstract class Personcase class Student(age: Int) extends Personcase class Worker(age: Int, salary: Double) extends Personcase object Shared extends Personobject case_class_object {def main(args: Array[String]) {def caseOps(person: Person) = person match {case Student(age) => println("I am " + age + "years old")case Worker(_, salary) => println("Wow, I got " + salary)case Shared => println("No property")}caseOps(Student(19))caseOps(Shared)val worker = Worker(29, 10000.1)val worker2 = worker.copy(salary = 19.95)val worker3 = worker.copy(age = 30)}}

嵌套 case

abstract class Itemcase class Book(description: String, price: Double) extends Itemcase class Bundle(description: String, price: Double, items: Item*) extends Itemobject Pattern_Match_Case_Class_Nested {def main(args: Array[String]) {def caseclass_nested(person: Item) = person match {case Bundle(_, _, art@Book(_, _), rest@_*) => println(art.description + " : " + art.price + rest)//      case Bundle(_, _, Book(descr, _), _*) => println("The first description is :" + descr)case _ => println("Oops!")}caseclass_nested(Bundle("1111 Special's", 30.0,Book("Scala for the Spark Developer", 69.95),Bundle("Hadoop", 40.0,Book("Hive", 79.95),Book("HBase", 32.95))))caseclass_nested(Bundle("1212 Special's", 35.0,Book("Spark for the Impatient", 39.95)))}}

17 scala case class object相关推荐

  1. Scala Case类和对象

    Scala是没有Java中的switch case语法的,相对应地,scala提供了更加强大的match case 语法,即模式piper,类替代switch case,match case也被称为模 ...

  2. scala case语句_Scala模式与case语句匹配

    scala case语句 Scala supports inbuilt pattern matching mechanism which is one of the more powerful fea ...

  3. scala单例object与伴生object入门

    概念 object是一个特殊的类,特殊在这个类只有一个实例.并且是懒加载的,就是用到的时候才创建. 当对象定义于顶层时(即没有包含在其他类中),单例对象只有一个实例. 当对象定义在一个类或方法中时,单 ...

  4. Scala Case Class介绍

    1.代码示例 package com.yy.base/*** case class 示例*/ abstract class Person case class Student(name:String, ...

  5. scala class和object,trait的区别

    2019独角兽企业重金招聘Python工程师标准>>> Scala类 class Counter {private var value = 0 // 必须初始化字段def incre ...

  6. scala case class 继承_数字硬件系统设计之一:Scala快速入门(2)

    原想简单笼统介绍一下scala,后感觉这么做意思不大,网友看了和没看一样,还是应该稍微详细具体一点,故而把系列编号由(上)(中)(下),改为(上)(2)(3)(4)(5)....,(上)就是(1)吧, ...

  7. scala:对象object

    Scala没有静态方法或字段,可以用对象object(首字母小写)结构完成类似的功能. object M {var count = 0;def inc = {count += 1; count}def ...

  8. Scala Case

    /*** 支持模式匹配,默认实现了Serializable接口** 样例类: case class 类名(属性....)* 类名的定义必须是驼峰式,属性名称第一个字母小写*/ case class M ...

  9. scala case class入门

    case class的输出 如下没有写case class的toString方法,但是是可以输出的 object Test extends App {val p1 = Person("lim ...

最新文章

  1. Linux系统中网络配置详解
  2. 文件夹没有安全选项-文件上传下载-路径访问被拒绝
  3. Python 删除满足条件的某些行
  4. CentOS7 安装nginx
  5. ptcms精美小说阅读网站源码(带采集规则)
  6. 黑客攻防技术宝典Web实战篇第2版—第2章核心防御机制
  7. JavaScript常用设计模式
  8. 剑指offer python版 构建乘积数组
  9. 游戏开发流程-微信小游戏(含源码)
  10. 2022-03-02 组建raft集群实战及日志复制与主从切换调研
  11. 怎么安装sqlserver2000数据库出现挂起提示
  12. 基于Android的医院预约挂号系统
  13. java程序的执行流程
  14. IG02数据准备(翻译)
  15. LTE学习理解系列——TDD LTE信源指定时隙配比设置
  16. 三年级计算机帮助我们学本领,三年级学本领100字作文
  17. 逃离美国,跨越8000公里远程办公,他开发了世界上最强的虚拟机
  18. Qt报错:calling ‘split‘ with incomplete return type ‘QStringList‘
  19. 在cmd下import cv2报错——OpenCV实现BRISK
  20. rrpp协议如何修改_H3C 中低端以太网交换机 可靠性典型配置指导-6W100

热门文章

  1. 华为/华三交换机配置SSH免密登录
  2. 机器学习数学基础——全概率公式与贝叶斯公式
  3. 【知识图谱】实践篇——基于医疗知识图谱的问答系统实践(Part2):图谱数据准备与导入
  4. STM32F103系列的单片机一共有11个定时器
  5. getline 两次回车 解决办法
  6. 【Spring】@Lazy注解
  7. NAACL2022-Prompt相关论文对Prompt的看法
  8. 数值计算之 拟合法,线性拟合,多项式拟合
  9. VMware 虚拟SCSI、SATA 和 NVMe 存储控制器条件、限制和兼容性
  10. Failover feature ‘ANSYS electronics_desktop‘ is not available. No valid FLEXlm servers specified.解决方