第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Scala 關(guān)于樣例類的優(yōu)點(diǎn)

標(biāo)簽:
大數(shù)據(jù)

case class在匹配模式和actor中经常使用到,当一个类被定义成为case类后,Scala会自动帮你创建一个伴生对象并帮你实现了一系列方法且带来了不少好处

1.实现了apply方法,意味着你不需要使用new关键字就能创建该类对象

scala> case class People(name:String,age:Int)
defined class People

scala> val p = People("mobin",22)   //省略了new关键字p: People = People(mobin,22)

2.实现了unapply方法,可以通过模式匹配来获取类属性,是Scala中抽取器的实现和模式匹配的关键方法

scala> p match { case People(x,y) => println(x,y) }
(mobin,22)

3.实现了类构造参数的getter方法(构造参数默认被声明为val),但是当你构造参数是声明为var类型的,它将帮你实现setter和getter方法(不建议将构造参数声明为var)

构造参数为val的情况(默认):

scala> p.name
res0: String = mobin
  
scala> p.name = "mobin1"    //报错,因为构造参数被声明为val所以并没有帮你实现setter方法<console>:10: error: reassignment to val
p.name = "mobin1"构造参数为var的情况:

scala> case class People(var name:String) //参数被声明为vardefined class People
  
scala> val p = People("mobin")
p: People = People(mobin)
  
scala> p.name = "mobin2"p.name: String = mobin2
  
scala> p.name
res1: String = mobin2 //修改成功,并没有报错

4.还默认帮你实现了toString,equals,copy和hashCode等方法

总结:

  • case class比普通的class多了不少的方法,所以当你不需要这些额外的方法时你就可以将类定义为普通的类,但是你又不想通过new关键字来创建实例,你可以在普通类中实现apply方法达到此目的

  • 构造器的每个参数都成为val,除非显式被声明为var,但是并不推荐这么做;case本就旨在创建的是不可变数据,所以在使用模式匹配时显得极为容易,因为匹配模式的本质就是传递值,得到值取执行对应的逻辑

  • 提供unapply方法使模式匹配可以工作;

  • 生成toString、equals、hashCode和copy方法,除非显示给出这些方法的定义。



作者:他与理想国
链接:https://www.jianshu.com/p/8b5892060858


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消