Kotlin頂級(jí)函數(shù)

頂級(jí)函數(shù)

Java中详炬,遇到一段重復(fù)性非常高的代碼又憨。我們會(huì)將其抽離成一個(gè)方法翠霍。這樣的代碼就有比較高的內(nèi)聚。當(dāng)遇到需要變更的時(shí)候蠢莺,只需要變更一處即可寒匙。

public class Main {

    public static void main(String[] args) {
        sayMessage("aa");
        sayMessage("ccc");
    }

   private static void sayMessage(String message) {
        System.out.println("hello:" + message);
    }
}

上面的代碼,我們將輸出語句封裝成一個(gè)方法躏将。當(dāng)我們需要更改輸出前綴 hello 的時(shí)候锄弱,只需更改sayMessage里面的方法。但是祸憋,這里面存在有一個(gè)問題会宪。就是這個(gè)方法只能在Main這個(gè)類使用。 如果有別的類需要用的話蚯窥。我們就需要將這個(gè)方法單獨(dú)抽離到一個(gè)類中掸鹅。

public class LogUtils {

    public static void sayMessage(String message) {
        System.out.println("hello:" + message);
    }
}

sayMessage單獨(dú)抽離在一個(gè)類中塞帐,需要調(diào)用的地方需要引入Logger這個(gè)類,然后調(diào)用即可巍沙。


public class Main {

    public static void main(String[] args) {
        LogUtils.sayMessage("aa");
        LogUtils.sayMessage("ccc");
    }

}

好像一些都按照正常的邏輯發(fā)展葵姥,但是我們好像忽略了一些問題。我們只是需要一個(gè)方法sayMessage 為何還需要定義一個(gè)類呢句携?我嘗試著解答這個(gè)問題榔幸,得到了以下結(jié)論

  • 增強(qiáng)代碼的內(nèi)聚性。
  • 為了迎合JVM矮嫉。

當(dāng)我們將方法抽離到一個(gè)類中削咆,就意味著這個(gè)類專門來做這一類的事情。就比如說LogUtils這個(gè)類專門用來處理輸出相關(guān)的操作蠢笋。這樣的話拨齐,聲明這個(gè)類意義就變得非常的重大。它使得我們的代碼更改聚合了昨寞。

public class LogUtils {

    public static void sayMessage(String message) {
        System.out.println("hello:" + message);
    }


    public static void sayErrorMessage(String message) {
        System.out.println("error:" + message);
    }
}

但是奏黑,更多的代碼我們不能把它歸為一類事物。為了迎合JVMJVM只能執(zhí)行類中的代碼)编矾。我們就強(qiáng)行將它聲明在一個(gè)類中熟史。比如項(xiàng)目中的Utils。而Kotlin中的頂級(jí)函數(shù)就是為了處理這個(gè)問題窄俏。

你只需要將函數(shù)放在文件頂層蹂匹。這個(gè)函數(shù)不屬于任何的類。假設(shè)你需要從包外調(diào)用它凹蜈。只需要導(dǎo)入這個(gè)包即可限寞。

package hello.aa.cc.dd.KotlinLearn.chapter_1.hello

fun sayMessage(message:String){
    println("hello ${message}")
}

import hello.aa.cc.dd.KotlinLearn.chapter_1.hello.sayMessage

fun main(args: Array<String>) {
    sayMessage("hello world");
}

當(dāng)然,Kotlin是完全兼容Java代碼的仰坦。那么履植,我們?cè)?code>Java中如何調(diào)用這個(gè)代碼呢?其實(shí)悄晃,Kotlin 內(nèi)部也是聲明了一個(gè)類玫霎。然后將我們所寫的文件名作為 類名。頂級(jí)函數(shù)作為該類的靜態(tài)函數(shù)妈橄。

public final class hello/aa/cc/dd/KotlinLearn/chapter_1/hello/HelloKt {


  // access flags 0x19
  public final static sayMessage(Ljava/lang/String;)V
    @Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
   L0
   

假設(shè)我們需要更改默認(rèn)的類名的話需要在文件前面加上

@file:JvmName("LoggerUtils")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庶近,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子眷蚓,更是在濱河造成了極大的恐慌鼻种,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沙热,死亡現(xiàn)場離奇詭異叉钥,居然都是意外死亡罢缸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門投队,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祖能,“玉大人,你說我怎么就攤上這事蛾洛。” “怎么了雁芙?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵轧膘,是天一觀的道長。 經(jīng)常有香客問我兔甘,道長谎碍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任洞焙,我火速辦了婚禮蟆淀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘澡匪。我一直安慰自己熔任,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布唁情。 她就那樣靜靜地躺著疑苔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甸鸟。 梳的紋絲不亂的頭發(fā)上惦费,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音抢韭,去河邊找鬼薪贫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛刻恭,可吹牛的內(nèi)容都是我干的瞧省。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼鳍贾,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼臀突!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贾漏,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤候学,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后纵散,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梳码,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隐圾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掰茶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暇藏。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖濒蒋,靈堂內(nèi)的尸體忽然破棺而出盐碱,到底是詐尸還是另有隱情,我是刑警寧澤沪伙,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布瓮顽,位于F島的核電站,受9級(jí)特大地震影響围橡,放射性物質(zhì)發(fā)生泄漏暖混。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一翁授、第九天 我趴在偏房一處隱蔽的房頂上張望拣播。 院中可真熱鬧,春花似錦收擦、人聲如沸贮配。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牧嫉。三九已至,卻和暖如春减途,著一層夾襖步出監(jiān)牢的瞬間酣藻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國打工鳍置, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辽剧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓税产,卻偏偏與公主長得像怕轿,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辟拷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容