真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Kotlin中實(shí)現(xiàn)類似Java或C#中靜態(tài)的方法是什么

小編給大家分享一下Kotlin中實(shí)現(xiàn)類似Java或C#中靜態(tài)的方法是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

10年積累的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有天等免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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

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

一、包級函數(shù)

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

二、伴生對象

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

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

fun main(args: Array) {
 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)}
    }
  }
}

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

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

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

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)然可以用上面的兩種方法來實(shí)現(xiàn)這些靜態(tài)方法,但是我們有更好的方法。

fun String.isEmpty() = this != null && this.length == 0;

fun String.isWeakEmpty()= this.isEmpty() && this.trim().length == 0

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

四、對象聲明

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

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

object AppInfo{
  var AppName = "Kotlin Message"
  var AppAuthor = "Riley Ge"
  fun toSimpleString() {
    println("AppName:$AppName,AppAuthor:$AppAuthor") 
  }
}

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

五、總結(jié)

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

看完了這篇文章,相信你對Kotlin中實(shí)現(xiàn)類似Java或C#中靜態(tài)的方法是什么有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


分享題目:Kotlin中實(shí)現(xiàn)類似Java或C#中靜態(tài)的方法是什么
轉(zhuǎn)載注明:http://weahome.cn/article/gssssd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部