Scala Case Class介绍
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介绍相关推荐
- Scala Case类和对象
Scala是没有Java中的switch case语法的,相对应地,scala提供了更加强大的match case 语法,即模式piper,类替代switch case,match case也被称为模 ...
- [转载]常用CASE工具介绍
[转载]常用CASE工具介绍 转载自:http://www.cnblogs.com/powerlc/archive/2006/01/12/315959.html 一,概述 今天, 代码变得日益简单 ...
- mysql+case_mysql内置函数case用法介绍
本节内容: mysql内置函数case使用介绍 mysql对case函数的解释: 复制代码 代码示例: mysql> ? case Many help items for your reques ...
- 常用CASE工具介绍
一,概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要.企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkFlow是典型的业务及流程建 ...
- scala case语句_Scala模式与case语句匹配
scala case语句 Scala supports inbuilt pattern matching mechanism which is one of the more powerful fea ...
- 17 scala case class object
17 scala case class object 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) Reac ...
- 常用CASE工具介绍 ZZ
常用CASE工具介绍 一,概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要.企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkF ...
- 常用CASE工具介绍 (csnd.net)
常用CASE工具介绍 一,概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要.企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkF ...
- 常用CASE工具介绍 1
一,概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要.企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkFlow是典型的业务及流程建 ...
最新文章
- grantrevoke
- 指定位数%-m.nf与%m.nf的异同
- 【C++】42.使用YAML文件进行参数配置、读取与生成YAML文件
- linux内核模块配置,如何为linux内核模块开发配置clang_complete?
- Java 文件上传组件 Apache Commons FileUpload 应用指南(二)——FileUpload如何工作?
- linux mv命令改名,Linux mv命令:移动文件或改名
- android studio table居中代码_html table表格标签内容如何居中显示?表格的align属性的用法介绍...
- NAT对数据业务的影响
- private访问权限java_Java 访问权限控制:public、private、protected
- 什么是CSS网页切图
- Dell T40服务器系统安装问题
- 计算机组成原理运算器设计实验之8位可控加减法电路设计
- urllib的使用1
- 计蒜客 联想专卖店大促销
- Flutter 替换高德定位默认图标
- 微信小程序界面设计入门课程-样式wxss中使用css课程-文本-direction 文本方向
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
- mysql+uuid的数据类型_mysql 数据类型
- JDBC连接执行mysql存储过程报权限错误:User does not have access to metadata required to determine stored procedure
- crh寄存器_STM32的CRH、CRL、ODR和IDR寄存器的使用总结