一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - 詳解Kotlin中如何實(shí)現(xiàn)類(lèi)似Java或C#中的靜態(tài)方法

詳解Kotlin中如何實(shí)現(xiàn)類(lèi)似Java或C#中的靜態(tài)方法

2020-11-02 17:46嘎子 JAVA教程

Kotlin中如何實(shí)現(xiàn)類(lèi)似Java或C#中的靜態(tài)方法,本文總結(jié)了幾種方法,分別是:包級(jí)函數(shù)、伴生對(duì)象、擴(kuò)展函數(shù)和對(duì)象聲明。這需要大家根據(jù)不同的情況進(jìn)行選擇。

大家可以在網(wǎng)絡(luò)上搜到不少這樣的文章,官方推薦是包級(jí)函數(shù),也有人說(shuō)用伴生對(duì)象(companion class)。這些都是不錯(cuò)的選擇,但并不完善,我們?cè)诓煌那闆r下有更好的選擇。我總結(jié)了幾種方法,分別是:包級(jí)函數(shù)、伴生對(duì)象、擴(kuò)展函數(shù)和對(duì)象聲明。這需要大家根據(jù)不同的情況進(jìn)行選擇。

一、包級(jí)函數(shù)

KotlinJavaC#不同的是,可以在包里面直接聲明函數(shù)。做法和類(lèi)中是一樣的,這里就不多說(shuō)了,的確是一個(gè)非常好的選擇。適用于函數(shù)不需要不包內(nèi)部的類(lèi)進(jìn)行數(shù)據(jù)共享的方法。

二、伴生對(duì)象

從語(yǔ)義上來(lái)講,伴生函數(shù)與Java中靜態(tài)方法最為相近,所以用伴生對(duì)象完全可以實(shí)現(xiàn)Java中靜態(tài)類(lèi)的所有內(nèi)容。但在Java中使用靜態(tài)方法有時(shí)是沒(méi)有辦法的選擇,在Kotlin中伴生對(duì)象只是我們的一種選擇。下面我就介紹一下伴生對(duì)象。
大家在使用Java的時(shí)不知有沒(méi)有注意到,Java類(lèi)中的靜態(tài)變量及方法是在什么時(shí)候初始化的?是在靜態(tài)方法第一次調(diào)用時(shí)還是在相應(yīng)的Java類(lèi)被加載時(shí)?答案是在Java類(lèi)被加載時(shí)(也就是說(shuō)如果你調(diào)用過(guò)Java類(lèi)中的實(shí)例變量及方法后,即使你沒(méi)有使用靜態(tài)變量及方法,靜態(tài)變量已經(jīng)初始化了)。這種現(xiàn)象用伴生來(lái)描述是不是很貼切。

在Kotlin中,認(rèn)為一個(gè)類(lèi)中有兩類(lèi)東東,一類(lèi)是Java類(lèi)中的實(shí)例變量及方法,另一類(lèi)是Java類(lèi)中的靜態(tài)變量及方法。Kotlin將靜態(tài)實(shí)例及方法統(tǒng)一打包到一個(gè)伴生類(lèi)中,就是這個(gè)樣子啦。下面給出一個(gè)例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
fun main(args: Array<String>) {
 Books.getBestSellers()
}
class Books(var name: String, val page: Int) {
  fun getWordCount()=page*100
  companion object ComBooks{
    var bestSellers=arrayOf("Harry Potter\r\t","Lord of the Rings\r\t")
    fun getBestSellers() {
      bestSellers.forEach{v->println(v)}
    }
  }
}

伴生類(lèi)是用companion來(lái)聲明的,他在伴生對(duì)象所在的類(lèi)被加載,伴生對(duì)象被初始化,與Java靜態(tài)成員一樣。其可以匿名或者與包含他的類(lèi)類(lèi)名相同。調(diào)用有兩種: Books.ComBooks.getBestSellsers()?Books.getBestSellsers()?。

三、擴(kuò)展函數(shù)

在Java中,我們經(jīng)常用寫(xiě)Utils類(lèi),這些類(lèi)往往都是針對(duì)某一個(gè)對(duì)象對(duì)其功能進(jìn)行與自身程序相匹配的操作。其中的方法以靜態(tài)方法居多,比方說(shuō):

?
1
2
3
4
5
6
7
8
9
10
public class Utils {
 
  public static boolean isEmpty(String string){
    return string != null && string.length() == 0;
  }
 
  public static boolean isWeakEmpty(String string){
    return isEmpty(string) && string.trim().length() == 0;
  }
}

我們當(dāng)然可以用上面的兩種方法來(lái)實(shí)現(xiàn)這些靜態(tài)方法,但是我們有更好的方法。

?
1
2
3
fun String.isEmpty() = this != null && this.length == 0;
 
fun String.isWeakEmpty()= this.isEmpty() && this.trim().length == 0

上面兩行代碼給String這個(gè)類(lèi)擴(kuò)展了兩個(gè)函數(shù),這兩個(gè)函數(shù)就可以像其原生函數(shù)一樣調(diào)用,代碼十分優(yōu)美。其實(shí)擴(kuò)展函數(shù)并沒(méi)有修改String類(lèi)內(nèi)部的東東,也只是給String加了兩個(gè)靜態(tài)函數(shù),但相比Java的Utils類(lèi),可讀性有了非常大的提高。

四、對(duì)象聲明

繼續(xù)考慮上面的Utils類(lèi),這個(gè)類(lèi)中所有的方法(有時(shí)也有可能有變量)都是靜態(tài)的,這個(gè)方法根本沒(méi)有必要實(shí)例化,在Java中我們經(jīng)常將此種類(lèi)聲明為靜態(tài)類(lèi),在Kotlin中針對(duì)這種情況有沒(méi)有好的對(duì)應(yīng)方案呢?有沒(méi)有比伴生對(duì)象更好的方案呢?當(dāng)然是有的,對(duì)象聲明就是一種。

對(duì)象聲明非常好理解,就是用object關(guān)鍵字聲明了一個(gè)對(duì)象,對(duì)象里面可以用變量也可以有方法,如:

?
1
2
3
4
5
6
7
object AppInfo{
  var AppName = "Kotlin Message"
  var AppAuthor = "Riley Ge"
  fun toSimpleString() {
    println("AppName:$AppName,AppAuthor:$AppAuthor")
  }
}

發(fā)現(xiàn)Kotlin的對(duì)象真是強(qiáng)大!有一點(diǎn)大家注意一下,AppInfo是在第一次被訪問(wèn)到時(shí)延遲初始化的,也就是說(shuō)在對(duì)象聲明時(shí)AppInfo并沒(méi)有初始化。

五、總結(jié)

說(shuō)了這么多方法,現(xiàn)在沒(méi)有人在擔(dān)心Kotlin沒(méi)有靜態(tài)方法了吧,Kotlin沒(méi)有只是因?yàn)樗梢宰龅母?。而且Kotlin也給了大家更多的選擇,大家可以根據(jù)自己的實(shí)際情況選用合適的方法,讓自己的代碼高效而優(yōu)美。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://tson.com/kotlin-static/?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91你懂的 | 高h短篇校园1v1 | 亚洲AV无码国产精品午夜久久 | 欧美 亚洲 综合 卡通 另类 区 | 姐姐不~不可以动漫在线观看 | 国产成人精品午夜视频' | 欧美草逼网站 | 欧美亚洲国产精品久久久 | 99精品国产成人a∨免费看 | 日本视频在线免费播放 | 91精品婷婷国产综合久久8 | 天天综合天天影视色香欲俱全 | 乌克兰粉嫩摘花第一次 | 精品久久久久久亚洲 | 奇米网在线 | 欧美精品成人a多人在线观看 | 亚洲人成毛片线播放 | 精品午夜寂寞黄网站在线 | 亚洲人成综合在线播放 | 国产在线观看91精品一区 | 色淫影院 | 日本高清视频在线免费观看 | 大桥未久midd—962在线 | 亚欧国产 | 青柠在线完整高清观看免费 | 日韩在线天堂 | 欧美一级欧美一级高清 | 欧美成人免费tv在线播放 | 欧美日韩亚洲成人 | 三体动漫在线观看免费完整版2022 | 扒开老师两片湿漉的肉 | 日本成熟 | 免费抽搐一进一出印度 | aⅴ天堂小视频 | 男同桌脱我奶罩吸我奶作文 | 特黄特色大片免费视频大全 | 亚洲高清中文字幕一区二区三区 | 欧美一级欧美三级 | 日本动漫黄网站在线观看 | 2019年国产不卡在线刷新 | 欧美日韩高清一区 |