Kotlin基礎(chǔ)教程之dataclass,objectclass,use函數(shù),類(lèi)擴(kuò)展,socket
Kotlin基礎(chǔ)教程之dataclass,objectclass,use函數(shù),類(lèi)擴(kuò)展,socket
Kotlin提供了一些機(jī)制來(lái)擴(kuò)展已有的類(lèi),如下:
還記得我們之前寫(xiě)過(guò)的Point3D類(lèi)嗎?(將其略作修改,將成員變量改為Double類(lèi)型)
讓我們?yōu)槠鋽U(kuò)展一個(gè)length函數(shù)

擴(kuò)展的方法很簡(jiǎn)單,只要在函數(shù)名前面加上類(lèi)名就行了.
這樣Point3D的對(duì)象就有了一個(gè)名為length的方法.
運(yùn)行的結(jié)果不出所料:

除此之外,在Kotlin中還有一些特殊的類(lèi),比如Data Class:

有些類(lèi)只包含數(shù)據(jù),不需要包含方法,就可以聲明為data class,當(dāng)然data class并不是不能包含方法.
data class最大的特色在于copy函數(shù)和多變量賦值,可以在一條語(yǔ)句里面把不同的字段賦值給不同的變量.
運(yùn)行結(jié)果如下:

Kotlin一般在類(lèi)中不允許static成員,前面曾經(jīng)說(shuō)過(guò)可以使用companion object來(lái)創(chuàng)建一個(gè)伴生對(duì)象從而可以使用static成員.
這里還有一種方法就是使用object關(guān)鍵字聲明一種特殊的類(lèi),這個(gè)類(lèi)只有一個(gè)實(shí)例,因此看起來(lái)整個(gè)類(lèi)就好像是一個(gè)對(duì)象一樣.如下:

這里把類(lèi)聲明時(shí)的class關(guān)鍵字改成了object,這個(gè)類(lèi)里面的成員默認(rèn)都是static的.
另外我們可以看到在這段代碼中出現(xiàn)了一個(gè)use函數(shù),這個(gè)函數(shù)的參數(shù)是一個(gè)lambda表達(dá)式或者說(shuō)一個(gè)匿名函數(shù).
其參數(shù)必須實(shí)現(xiàn)Closeable接口,其參數(shù)在函數(shù)結(jié)束后會(huì)自動(dòng)關(guān)閉,調(diào)用其close方法,無(wú)論是否發(fā)生異常.
其實(shí)這個(gè)用法來(lái)自于Java7中引入的一個(gè)語(yǔ)法,在Java7中引入的這個(gè)語(yǔ)法名為try-with-resource,其對(duì)應(yīng)的Java代碼如下:

server變量在try語(yǔ)句中被聲明并初始化,無(wú)論是否發(fā)生異常,最后server都會(huì)被自動(dòng)關(guān)閉.
之所以引入這種語(yǔ)法,是為了解決finally語(yǔ)句的不足.
在Kotlin中的use函數(shù)就是實(shí)現(xiàn)了Java中try-with-resource語(yǔ)句的功能.
這段Kotlin代碼寫(xiě)的是一個(gè)多線(xiàn)程Socket服務(wù)器的demo,其他部分的代碼如下:

客戶(hù)端代碼:



當(dāng)Socket服務(wù)器啟動(dòng)后,再啟動(dòng)SocketClient,運(yùn)行結(jié)果如下:
服務(wù)器輸出:

客戶(hù)端輸出:

可以看到Socket服務(wù)已經(jīng)正常啟動(dòng)了.
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Java數(shù)組動(dòng)態(tài)增加容量過(guò)程解析
這篇文章主要介紹了Java數(shù)組動(dòng)態(tài)增加容量過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Java多文件以ZIP壓縮包導(dǎo)出的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了Java多文件以ZIP壓縮包導(dǎo)出的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Mybatis集成Spring的實(shí)例代碼_動(dòng)力節(jié)點(diǎn)Java 學(xué)院整理
這篇文章主要介紹了Mybatis集成Spring的實(shí)例代碼,需要的朋友可以參考下2017-09-09
java通過(guò)HTTP接收json詳細(xì)實(shí)例代碼
Java作為一門(mén)廣泛使用的編程語(yǔ)言,很多開(kāi)發(fā)人員會(huì)用它來(lái)進(jìn)行http請(qǐng)求,獲取json數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于java通過(guò)HTTP接收json的相關(guān)資料,需要的朋友可以參考下2023-11-11
MyBatis流式查詢(xún)的項(xiàng)目實(shí)踐
本文主要介紹了MyBatis流式查詢(xún)的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
SpringBoot實(shí)現(xiàn)接口數(shù)據(jù)的加解密功能
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)接口數(shù)據(jù)的加解密功能,對(duì)接口的加密解密操作主要有兩種實(shí)現(xiàn)方式,文中給大家詳細(xì)介紹,需要的朋友可以參考下2019-10-10
Java服務(wù)限流算法的6種實(shí)現(xiàn)
服務(wù)限流是指通過(guò)控制請(qǐng)求的速率或次數(shù)來(lái)達(dá)到保護(hù)服務(wù)的目的,本文主要介紹了Java服務(wù)限流算法的6種實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-05-05
Java之HashMap.values()轉(zhuǎn)List時(shí)的錯(cuò)誤和正確演示
這篇文章主要介紹了Java之HashMap.values()轉(zhuǎn)List時(shí)的錯(cuò)誤和正確演示,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Spring Boot的Maven插件Spring Boot Maven plu
Spring Boot的Maven插件Spring Boot Maven plugin以Maven的方式提供Spring Boot支持,Spring Boot Maven plugin將Spring Boot應(yīng)用打包為可執(zhí)行的jar或war文件,然后以通常的方式運(yùn)行Spring Boot應(yīng)用,本文介紹Spring Boot的Maven插件Spring Boot Maven plugin,一起看看吧2024-01-01

