




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第秒懂Kotlin之Java工程師快速掌握Kotlin的技巧Kotlin是一種在Java虛擬機(jī)上運行的靜態(tài)類型編程語言,被稱之為Android世界的Swift,由JetBrains設(shè)計開發(fā)并開源。
Kotlin可以編譯成Java字節(jié)碼,也可以編譯成JavaScript,方便在沒有JVM的設(shè)備上運行。
在GoogleI/O2017中,Google宣布Kotlin成為Android官方開發(fā)語言。
Kotlin/JVM可以看做是對改進(jìn)Java的一種積極的嘗試,其試圖改進(jìn)Java編程語言中已知的被廣泛討論的缺點與不足。因為我多年前從事過C#的開發(fā),初次看到Kotlin,感覺好多特性C#好多年前就有了。足見Java是多么的傳統(tǒng),不愿意過多的引入語法糖。
關(guān)于Kotlin與Java的愛恨情仇此處按下不表,等有機(jī)會單獨寫一篇相關(guān)文章。本文僅想從Java慣用者的角度給出Kotlin與Java的一些不同點,這往往對Java慣用者迅速掌握Kotlin是至關(guān)重要的。因為Kotlin是對Java的一種改進(jìn),其與Java是100%互操作的,所以Java程序員經(jīng)過短暫的熟悉后往往可以快速入門,進(jìn)而熟練掌握Kotlin。
人類學(xué)習(xí)新事物的一個很重要的方法就是類比,如果新事物與舊事物相似性非常大,那么類比學(xué)習(xí)的效果會更加明顯,從Java到Kotlin非常符合這個特征,以你熟悉的Java來類比不熟悉的Kotlin將會事半功倍,讓我們開始吧。
本文基于Kotlin1.4.0版本
Kotlin與Java在語法上存在一些差異,不算特別巨大,下面列出了我認(rèn)為最需要適應(yīng)的幾條:
Kotlin中的方法和屬性可以不包含在類中
我們知道,Java中的一切是以class為基礎(chǔ)的,都要在class中,但是Kotlin卻不是。下面的代碼中,方法、屬性以及類共存于同一級,同一個文件中都是允許的。
varname:String="ShuSheng007"
funsum(x:Int,y:Int):Int{
returnx+y
classStudent{}
Kotlin中語句不需要以;結(jié)束
println("helloworld")
Kotlin中數(shù)據(jù)類型是后置的
//變量聲明時類型后置
varname:String="ShuSheng007"
//方法參數(shù)及返回值類型后置
funsum(x:Int,y:Int):Int{
returnx+y
}
Kotlin方法使用fun關(guān)鍵字定義
funsum(x:Int,y:Int):Int{
returnx+y
}
Kotlin的類和方法默認(rèn)是publicfinal的
類默認(rèn)不可以被繼承,基類中的方法默認(rèn)不可以被重寫,如果想要被繼承或者重寫需要用open關(guān)鍵字標(biāo)記
//Human類可以被繼承
openclassHuman{
//eat方法可以被overwrite
openfuneat(){
}
Kotlin中類繼承和接口實現(xiàn)使用:標(biāo)記
//類繼承
classMan:Human(){
overridefuneat(){
super.eat()
//實現(xiàn)接口
interfaceaction{
funsleep()
classWoman:action{
overridefunsleep(){
//...
}
Kotlin中使用var,val聲明變量及屬性,而且可以進(jìn)行類型推斷
在Java中,我們聲明一個變量必須先指定其類型,例如
Stringname="shusheng007";
但是在Kotlin中,編譯器可以根據(jù)賦值自動推斷其類型為String
varname="shusheng007"
Kotlin存在非空與可空類型
這個也是其宣傳的一大亮點,嘗試去解決價值幾十億美金的問題:NullPointerException
在Kotlin中每個對象默認(rèn)都是非null的,除非你顯式的將其聲明為可null
//非空類型
varname1:String="shusheng"
//可空類型
varname2:String=null
Kotlin中package可以與文件路徑不一致
什么意思呢?假設(shè)我們有個類文件在src/…/top/ss007/learn文件路徑中
那么對于Java此類的包名必須為
packagetop.ss007.learn
而對于Kotlin來說就沒有這個限制,可以隨便叫,例如叫:就是這么任性
packagejust.so.wayward
確實挺任性的,所以這點建議還是遵守Java的規(guī)范更好。
Kotlin中沒有受檢異常(CheckedException)
在Java中有很多受檢查異常,程序員被強(qiáng)制要求處理它,或者拋給下層調(diào)用者處理。但是Kotlin沒有這個限制。
Kotlin強(qiáng)調(diào)不可變的概念
Kotlin會優(yōu)先使用不可變對象,例如不可變的集合,不可變的變量。這些不可變對象生成后就只能讀取,而不能修改。至于使用不可變對象有很多好處,例如其天然的線程安全性等
以上幾條是個人認(rèn)為的最顛覆我們認(rèn)知的差異點,熟悉了上面幾條后Java程序員就基本上可以看得懂kotlin的代碼了
Java中不存在的特性
Kotlin中引入了很多Java中不存在的特性,下面是幾條我認(rèn)為比較重要的
方法類型(FunctionType)
在Kotlin中方法是一等公民,意思就是方法就和類一樣,類可以干的事,方法都可以干。方法竟然可以作為類型當(dāng)其他方法的參數(shù)傳遞,當(dāng)其他方法的返回值類型,當(dāng)變量的聲明類型…這個比較顛覆Java程序員的三觀,Java中是沒有對應(yīng)的概念的。如果非要找一個對應(yīng)物的話,那就是函數(shù)接口了。
下面是一個方法類型(兩個int數(shù)據(jù)得到一個int,例如1+2=3)。我們完全可以將其看成是java中的一個類,所有可以使用類的地方這家伙都適用,也就是說kotlin中,方法可以當(dāng)參數(shù)傳遞了,相當(dāng)于實現(xiàn)了方法引用,牛逼哄哄的。
(Int,Int)-Int
例如如下方法,第3個參數(shù)operation的類型就是上面的方法類型
funcalculate(x:Int,y:Int,operation:(Int,Int)-Int):Int{
returnoperation(x,y)
//如何調(diào)用
funsum(x:Int,y:Int):Int{
returnx+y
//將sum方法當(dāng)參數(shù)傳入了calculate方法中
calculate(4,5,::sum)
//我們也可以使用Lambda表達(dá)式
calculate(4,5,{a,b-a+b})
//當(dāng)Lambda表達(dá)式是方法的最后一個參數(shù)時,其可以移到()外面
calculate(4,5){a,b-a+b}
那么如何在Java中實現(xiàn)相同的功能呢?
第一步:按照需求定義一個函數(shù)接口
下面的接口只有一個抽象方法,是一個函數(shù)接口。
@FunctionalInterface
publicinterfaceFun2P1,P2,R{
Rinvoke(P1p1,P2p2);
}
第二步:將其作為方法參數(shù)類型
publicintjavaCalculate(intx,inty,Fun2Integer,Integer,Integeroperation){
returnoperation.invoke(x,y);
}
經(jīng)過上面兩步就搞定了。
當(dāng)在Kotlin中調(diào)用Java中的方法javaCalculate時,IDE會提示如下信息
第一條是告訴你第三個參數(shù)可以使用Kotlin中的函數(shù)類型,代碼如下
javaCalculate(4,5){a,b-a+b}
第二條是比較正統(tǒng)的,告知你需要一個類型為Fun2的參數(shù),代碼如下
javaCalculate(4,5,object:Fun2Int,Int,Int{
overridefuninvoke(p1:Int,p2:Int):Int{
returnp1+p2
})
在Java中我們使用new一個匿名類的對象,而在Kotlin中我們需要使用object關(guān)鍵字
屬性(Property)
varname:String="ShuSheng007"
對應(yīng)Java類里的私有字段(Field)外加getter和setter方法
privateStringname;
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
=name;
}
數(shù)據(jù)類dataclass
dataclassUser(valname:String,valage:Int)
大體相當(dāng)于Java中的JavaBean,但有細(xì)微差別,這也是Kotlin大勢宣傳其簡潔性時經(jīng)常展示的看家特性
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年海南澄邁教師招聘真題
- 河南省豫地科技集團(tuán)招聘筆試真題2024
- 石大學(xué)前兒童保育學(xué)課件3-1常見病之疾病早發(fā)現(xiàn)
- 教學(xué)設(shè)計太原幼兒師范李慧芳26日改
- 職業(yè)教育產(chǎn)教融合實訓(xùn)基地建設(shè)項目可行性研究報告
- 跨學(xué)科教學(xué)視野下的高中語文評價體系創(chuàng)新
- 2025至2030年中國電動木銑行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國玻璃鋼四連體桌行業(yè)投資前景及策略咨詢報告
- 持續(xù)創(chuàng)新驅(qū)動下的綠色工業(yè)人才培養(yǎng)與合作
- 2025至2030年中國滌棉漂白布行業(yè)投資前景及策略咨詢報告
- 《人生的智慧》課件
- 深度學(xué)習(xí)基礎(chǔ)與實踐 課件 10.1 ResNet網(wǎng)絡(luò)
- 基于針灸理論下陽朔舊縣村景觀更新設(shè)計研究
- 直播間設(shè)計裝修合同協(xié)議
- 生產(chǎn)過程危險和有害因素之3:“環(huán)境因素”辨識應(yīng)用示例清單(雷澤佳-2025A0)
- 2025年中考生物:環(huán)境保護(hù)|疾病預(yù)防|生物技術(shù)|食品安全 4個熱點考點練習(xí)題匯編(含答案解析)
- 二造管理深度精講講義
- 醫(yī)療數(shù)字化轉(zhuǎn)型中的法律合規(guī)策略
- 警務(wù)信息偵控題庫
- 裝飾石膏板行業(yè)跨境出海戰(zhàn)略研究報告
- GB/T 45340-2025金屬及其他無機(jī)覆蓋層鍍層厚度的測量斐索多光束干涉法
評論
0/150
提交評論