版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
17.類型參數(shù)化一、var類型的字段二、類型構(gòu)造器三、型變注解四、檢查型變注解五、類型構(gòu)造器的繼承關(guān)系六、上下界七、方法的類型參數(shù)八、對象私有數(shù)據(jù)目
錄
2Why?問題:無法預(yù)知對象的類型寫新的類工作量巨大解決方法:泛型——類型參數(shù)化優(yōu)點(diǎn):實(shí)例化生成不同的類對象,從而避免了很大的工作量例如:Array[T]、List[T]、Map[T,U]注意:只有類和特質(zhì)可以進(jìn)行類型參數(shù)化
3一、var類型的字段
4執(zhí)行兩個(gè)基本操作:獲取字段值或者設(shè)置為一個(gè)新值編譯器會(huì)隱式地把這個(gè)變量限制成private[this]的訪問權(quán)限,同時(shí)隱式地定義一個(gè)名為“變量名”的getter方法,和一個(gè)名為“變量名_=”的setter方法classA{
varaInt:Int=_
}
//相當(dāng)于
classA{
private[this]vara:Int=_
defaInt:Int=a
defaInt_=(x:Int)=a=x
}一、var類型的字段基本介紹
5外部讀取和修改var字段轉(zhuǎn)換成對getter和setter方法的調(diào)用也可以自定義getter和setter方法,以及一個(gè)private[this]修飾的var類型字段字段與方法沒有必然聯(lián)系如果自定義了這兩種方法,卻不一定要相應(yīng)的var字段與之對應(yīng),這兩個(gè)方法也可以操作類內(nèi)的其他成員且可以調(diào)用一、var類型的字段基本介紹
6二、類型構(gòu)造器7泛型的意思就是泛指某種數(shù)據(jù)類型在scala中,泛型用[數(shù)據(jù)類型]表示泛型一般是結(jié)合數(shù)組或者集合來使用泛型主要包括了泛型方法,泛型類以及泛型特質(zhì)二、類型構(gòu)造器2.1泛型2.2泛型類泛型類指的是把泛型定義到類的聲明上,即類中的成員的參數(shù)類型是由泛型來決定的,在創(chuàng)建對象時(shí),明確具體的數(shù)據(jù)類型class
類[T]
{val
變量名:
T}
8scala>abstractclassA[T]{
|vala:T
|}
classA
scala>defdoesNotCompile(x:A)={}
^
error:classAtakestypeparameters
scala>defdoesCompile(x:A[AnyRef])={}
defdoesCompile:(x:A[AnyRef])Unit二、類型構(gòu)造器A是一個(gè)類,被稱為“類型構(gòu)造器”不能只寫一個(gè)類名給出具體的類型參數(shù)實(shí)例
9三、型變注解103.1基本內(nèi)容A[T]這樣的類型構(gòu)造器,它們的類型參數(shù)T可以是協(xié)變的、逆變的或者不變的A[+T]表示類A在類型參數(shù)T上是協(xié)變的A[-T]表示類A在類型參數(shù)T上是逆變的類型參數(shù)的前綴“+”和“-”被稱為型變注解,沒有就是不變的三、型變注解
113.2關(guān)系圖關(guān)系變?yōu)槟?,與原關(guān)系反轉(zhuǎn)關(guān)系保持不變。沒有任何關(guān)系,不同類型三、型變注解
12四、檢查型變注解13
標(biāo)注了型變注解的類型參數(shù)不能隨意使用,類型系統(tǒng)設(shè)計(jì)要滿足“里氏替換原則”里氏替換原則的依據(jù)是子類型多態(tài)超類的變量可以指向子類的對象,因?yàn)樽宇惱^承了超類所有非私有成員,能在超類中使用的成員,一般在子類中均可使用四、檢查型變注解4.1基本內(nèi)容
14類型T(超類)類型S(子類)A[T](超類)
A[S](子類)
四、檢查型變注解4.2方法中的型變注解vala:A[T]=newA[S]不合法a.funcA(b:T)valc:T=a.funcA()協(xié)變類型:合法
15Scala的編譯器把類或特質(zhì)中任何出現(xiàn)類型參數(shù)的地方都當(dāng)作一個(gè)點(diǎn),點(diǎn)有協(xié)變點(diǎn)、逆變點(diǎn)和不變點(diǎn)之分,以聲明類型參數(shù)的類和特質(zhì)作為頂層開始,逐步往內(nèi)層深入更深一層的嵌套的點(diǎn)與在包含嵌套的外一層的點(diǎn)被歸為一類三種特殊情況:
①方法的值參數(shù)所在的點(diǎn)會(huì)根據(jù)方法外的點(diǎn)進(jìn)行一次翻轉(zhuǎn)②方法的類型參數(shù)也會(huì)根據(jù)方法外的點(diǎn)進(jìn)行一次翻轉(zhuǎn)③如果類型也是一個(gè)類型構(gòu)造器,會(huì)根據(jù)T的注解進(jìn)行翻轉(zhuǎn)雖然型變注解的檢查很麻煩,但這些工作都被編譯器自動(dòng)完成了四、檢查型變注解4.3編譯器判斷規(guī)則Q[+U,-T,V]
16五、類型構(gòu)造器的繼承關(guān)系17對于單個(gè)類型參數(shù)的類型構(gòu)造器而言,繼承關(guān)系很好判斷,只需要看型變注解是協(xié)變、逆變還是不變traitFunction1[-S,+T]{
defapply(x:S):T
}五、類型構(gòu)造器的繼承關(guān)系5.1單個(gè)類型參數(shù)S是入?yún)?shù),逆變T代表返回值,協(xié)變多個(gè)類型參數(shù)怎么辦呢?
18類型A(超類)類型a(子類)類型B(超類)類型b(子類)
5.2多類型參數(shù)
Function1[a,B]Function1[A,b]子類結(jié)論:把逆變類型參數(shù)由子類替換成超類、把協(xié)變類型參數(shù)由超類替換成子類五、類型構(gòu)造器的繼承關(guān)系
19六、上下界206.1上界對于類型構(gòu)造器A[-T],上界的形式為“U<:T”表示給類型添加一個(gè)上界,表示泛型參數(shù)必須要從該類(或本身)繼承六、上下界
21scala>abstractclassA[-T]{
|deffuncA[U<:T](x:U):U
|}
definedclassA6.2下界對于類型構(gòu)造器A[+T],下界的形式為“U>:T”表示給類型添加一個(gè)下界,表示泛型參數(shù)是該類型本身或者類型的超類如果既有下界又有上界。那么下界寫在前面,上界寫在后面六、上下界
22scala>abstractclassA[+T]{
|deffuncA[U>:T](x:U):U
|}
definedclassA七、方法的類型參數(shù)23方法也可以帶有類型參數(shù)當(dāng)方法僅僅使用了包含它的類或特質(zhì)中的類型參數(shù)時(shí),那么方法就沒必要寫出類型參數(shù)使用了未聲明的類型參數(shù),則必須寫在方法的類型參數(shù)里七、方法的類型參數(shù)不能有型變注解!!不能與已聲明的類型參數(shù)一樣!!
24八、對象私有數(shù)據(jù)25八、對象私有數(shù)據(jù)8.1var字段類型參數(shù)var類型的字段,類型參數(shù)不能是協(xié)變的,因?yàn)殡[式的setter方法需要一個(gè)入?yún)㈩愋蛥?shù)也不能是逆變的,因?yàn)殡[式的getter方法的返回類型就是字段的類型
26舉例:八、對象私有數(shù)據(jù)scala>classA[-T]{
|vara:T=_
|}
<console>:12:error:contravarianttypeToccurs
incovariantpositionintype=>Tofvariablea
vara:T=_
scala>classA[+T]{
|vara:T=_
}
vara:T=_
^
Online2:error:contravarianttypeToccursincovariantpositionintypeTofvariablea8.1var字段類型參數(shù)
27八、對象私有數(shù)據(jù)scala>classA[-T]{
|private[this]vara:T=_
|}
classA
scala>classA[-T]{
|private[this]vara:T=_
|}
classA如果var字段是對象私有的,即用private[this]修飾,那么它只能在定義該類或特質(zhì)時(shí)被訪問。此時(shí)gett
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職化學(xué)基礎(chǔ)(物質(zhì)性質(zhì))試題及答案
- 2025年高職計(jì)算機(jī)應(yīng)用技術(shù)(網(wǎng)頁制作)試題及答案
- 2025年中職幼兒發(fā)展與健康管理(幼兒行為引導(dǎo))試題及答案
- 2025年高職精細(xì)化工技術(shù)(精細(xì)化工應(yīng)用)試題及答案
- 2025年中職(生物技術(shù)應(yīng)用)生物制品檢測階段測試題及答案
- 2025年中職旅游管理(旅游線路設(shè)計(jì))試題及答案
- 2025年中職車輛維修(輪胎保養(yǎng)與檢測)試題及答案
- 2026年注冊消防工程師一級(消防安全案例分析)試題及答案
- 2025年高職廣告電子屏信息安全管理(風(fēng)險(xiǎn)防控措施)試題及答案
- 2026年廣州體育職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試備考題庫帶答案解析
- 2025年部編版道德與法治六年級上冊全冊教案設(shè)計(jì)(共4個(gè)單元含有教學(xué)計(jì)劃)
- 2025-2030中國電動(dòng)警用摩托車和應(yīng)急摩托車行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報(bào)告
- 農(nóng)機(jī)安全操作培訓(xùn)課件
- 企業(yè)所得稅納稅申報(bào)表(2024年修訂)填報(bào)要點(diǎn)及相關(guān)政策分析
- 課程設(shè)計(jì)說明書
- 2025年中國納秒紫外激光器行業(yè)市場運(yùn)行現(xiàn)狀及投資規(guī)劃建議報(bào)告
- 房屋租賃合同(附房屋交割清單)
- 奧特曼涂色畫簡筆畫直接打印版A4
- 小學(xué)五年級上冊英語(外研一起)期末模擬測試卷(一)
- 2022浪潮信創(chuàng)服務(wù)器CS5260H2技術(shù)白皮書
- 成品保護(hù)圖冊
評論
0/150
提交評論