1、代码示例

package com.yy.base/*** case class 示例*/
abstract class Person
case class Student(name:String,sno:Int) extends Person
case class Teacher(name:String,tno:Int) extends Person
case class None(name:String) extends Personobject CaseClassTest extends App {def caseClassMatch(p:Person) = p match{case Student(name,sno) => println(name + " is a student,sno is:" + sno)case Teacher(name,tno) => println(name + " is a teacher,tno is:" + tno)case None(name) => println("None matched")}val p = Student("yy",20151214)caseClassMatch(p)
}

2、结果

yy is a student,sno is:20151214

注意,当一个类被生成为case class 时,scala会默认作如下工作:

(1)如果参数不加var/val修改,默认为val。

(2)自动创建伴生对象,实现apply方法,方便了我们在创建对象时不适用new

(3)实现自己的toString、hashCode、copy和equals方法

3、copy等方法介绍

  val t = Teacher("xx",2015)println("toString:" + t.toString())println("hashCode:" + t.hashCode())//深度copyval t1 = t.copy()println("copy之无参拷贝:" + t1)println("copy之无参拷贝t内容是否equals t1:" + t.equals(t1))println(t==t1)val t2 = t.copy(name="zz")println("t2:" + t2.toString())val t3 = t.copy(tno=111)println("t3:" + t3)val t4 = t.copy("ww",222)println("t4:" + t4)

结果如下:

toString:Teacher(xx,2015)
hashCode:-1236856524
copy之无参拷贝:Teacher(xx,2015)
copy之无参拷贝t内容是否equals t1:true
true
t2:Teacher(zz,2015)
t3:Teacher(xx,111)
t4:Teacher(ww,222)

4、多个参数的case class

package com.yy.base/*** case class 多个参数示例*/
abstract class Person1
case class Student1(name:String,sno:Int) extends Person1
case class Teacher1(name:String,tno:Int) extends Person1
case class None1(name:String) extends Person1
//SchoolPerson包含0或者多个Person类型参数的类
case class SchoolPerson(desc:String, person:Person1*)object CaseClassNestedTest extends App {val sp = SchoolPerson("多个Person类型的类",Student1("xx",11),Teacher1("yy",22))sp match{case SchoolPerson(_,Student1(name,sno),_) => println(name+":"+sno)case SchoolPerson(_,_,Teacher1(name,tno)) => println(name+":"+tno)case _ => println("NO")}
}

结果为

xx:11

Scala Case Class介绍相关推荐

  1. Scala Case类和对象

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

  2. [转载]常用CASE工具介绍

    [转载]常用CASE工具介绍 转载自:http://www.cnblogs.com/powerlc/archive/2006/01/12/315959.html   一,概述 今天, 代码变得日益简单 ...

  3. mysql+case_mysql内置函数case用法介绍

    本节内容: mysql内置函数case使用介绍 mysql对case函数的解释: 复制代码 代码示例: mysql> ? case Many help items for your reques ...

  4. 常用CASE工具介绍

    一,概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要.企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkFlow是典型的业务及流程建 ...

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

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

  6. 17 scala case class object

    17 scala case class object 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) Reac ...

  7. 常用CASE工具介绍 ZZ

    常用CASE工具介绍   一,概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要.企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkF ...

  8. 常用CASE工具介绍 (csnd.net)

    常用CASE工具介绍   一,概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要.企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkF ...

  9. 常用CASE工具介绍 1

    一,概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要.企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkFlow是典型的业务及流程建 ...

最新文章

  1. grantrevoke
  2. 指定位数%-m.nf与%m.nf的异同
  3. 【C++】42.使用YAML文件进行参数配置、读取与生成YAML文件
  4. linux内核模块配置,如何为linux内核模块开发配置clang_complete?
  5. Java 文件上传组件 Apache Commons FileUpload 应用指南(二)——FileUpload如何工作?
  6. linux mv命令改名,Linux mv命令:移动文件或改名
  7. android studio table居中代码_html table表格标签内容如何居中显示?表格的align属性的用法介绍...
  8. NAT对数据业务的影响
  9. private访问权限java_Java 访问权限控制:public、private、protected
  10. 什么是CSS网页切图
  11. Dell T40服务器系统安装问题
  12. 计算机组成原理运算器设计实验之8位可控加减法电路设计
  13. urllib的使用1
  14. 计蒜客 联想专卖店大促销
  15. Flutter 替换高德定位默认图标
  16. 微信小程序界面设计入门课程-样式wxss中使用css课程-文本-direction 文本方向
  17. 【OpenCV】边缘检测:Sobel、拉普拉斯算子
  18. mysql+uuid的数据类型_mysql 数据类型
  19. JDBC连接执行mysql存储过程报权限错误:User does not have access to metadata required to determine stored procedure
  20. crh寄存器_STM32的CRH、CRL、ODR和IDR寄存器的使用总结

热门文章

  1. 【AtCoder】【思维】【图论】Splatter Painting(AGC012)
  2. vue—维持登录状态
  3. HTML table表格边框为单线的方法
  4. 企业服务大爆发,HR SaaS的机会与挑战
  5. jupyter内核配置问题
  6. Seata 极简入门
  7. 改进duilib的richedit控件的部分功能
  8. Android为App签名(为apk签名)
  9. 【Android】Android开源项目分类汇总
  10. 溯源(六)之溯源的方法