二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

scala_系列之_13scala_样例类和样例对象

放大字体  缩小字体 发布日期:2022-01-09 23:43:25    作者:熊雨哲    浏览次数:322
导读

16 样例类和样例对象样例类在class 前加上 case 关键字,这样得类称为样例类。默认实现了Serializable接口,可以封装数据。scala 为每一个样例类自动生成一个伴生对象,在该伴生对象中自动生成得模板代码包括:1)一个apply 方法,实例化该类得时候无需使用new 关键字;2)一个unapply 方法,该方法包含一个类型为伴生类得

16 样例类和样例对象

样例类

在class 前加上 case 关键字,这样得类称为样例类。默认实现了Serializable接口,可以封装数据。

scala 为每一个样例类自动生成一个伴生对象,在该伴生对象中自动生成得模板代码包括:

1)一个apply 方法,实例化该类得时候无需使用new 关键字;

2)一个unapply 方法,该方法包含一个类型为伴生类得参数,返回结果是Option 类型;

对应得类型参数是N元组,N是伴生类中主构造参数得个数;

​ unapply 方法用于对对象得解构操作,在case 类模式匹配中,该方法被自动调用,并将待匹配得对象作为参数传递给它;

如:

// 定义case类case class Person(name:String, age:Int){}//编译器自动生成得伴生对象是object Person{ // apply 方法 def apply(name:String,age:Int) = new Person(name,age) // unapply 方法 def unapply(p:Person):Option((String,Int)) = Some((p.name,p.age))}

**

样例对象

样例对象也是一个对象只是在实现得时候在object前面加上了case用于支持模式匹配,默认实现了Serializable接口,不可以封装数据。

case object 对象名

示例:

package day03import scala.util.Random// 定义无构造参数样例类case class CaseClass() { def say = println("say hello")}// 定义有构造参数得样例类case class CaseClass2(val name:String){ def say = println(s"say ${name}")}// 定义样例对象case object CaseObject{ def say = println("say object")}object CaseTest{ def main(args: Array[String]): Unit = { val arr = Array(CaseClass(), CaseClass2("hainiu"), CaseObject) val data = arr(Random.nextInt(arr.size)) println(data) data match { case x:CaseClass => x.say// case x:CaseClass2 => x.say case CaseClass2(x) => println(x) case x:CaseObject.type => x.say } }}

通过样例类实现支持模式匹配得多参

package day03case class CaseClass3(val args:Any*)object CaseClass3Test{ def main(args: Array[String]): Unit = { val demo = CaseClass3(1,2,3,4,5,6,7,8) demo match{ // unapplySeq方法,模式匹配得时候,可以匹配到序列里得每个元素 case CaseClass3(a,b,c,d,_*) => println(s"${a}, ${b}, ${c}, ${d}") } }}

反编译后查看:

海汼部落,原文链接:(hainiubl/topics/75748)

 
(文/熊雨哲)
免责声明
• 
本文仅代表发布者:熊雨哲个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈