Kotlin實戰--消除靜態工具類:頂層函數和屬性

1.引入

咱們都知道, Java 做爲 門面向對象的語言,須要全部的代碼都寫做類的函數。大多數狀況下,這種方式還能行得通。但事實上,幾乎全部的大型項目,最終都有不少的代碼並不能歸屬到任何 個類中。有時一個操做對應兩個不一樣的類的對象,並且重要性相差無幾。有時存在 個基本的對象,但你不想經過實例函數來添加操做,讓它的 API 繼續膨脹。結果就是,最終這些類將不包含任何的狀態或者實例函數,而是僅僅做爲一堆靜態函數的容器。在 JDK 中, 最適合的例子應該就是 Collections了。看看你本身的代碼,是否是也有一些類自己就以Util做爲後綴命名。 在kotlin中,根本就不須要去建立這些無心義的類, 相反,能夠把這些函數接放到代碼文件的頂層,不用從屬於任何的類。這些放在文件頂層的函數依然是包內的成員,若是你須要從包外訪問它,則須要 import 但再也不須要額外包一層。java

2.頂層函數

見名知意,原來在Java中,類處於頂層,類包含屬性和方法,在Kotlin中,函數站在了類的位置,咱們能夠直接把函數放在代碼文件的頂層,讓它不從屬於任何類。就像下面這樣,咱們在一個Test.kt文件中寫入以下的Kotlin代碼。bash

package com.smartcentury.agriculturalmarket.utils

fun getKotlin():String{
    return "Kotlin"
}
複製代碼

如今咱們看一下如何在其餘包中引用它:函數

import  com.smartcentury.agriculturalmarket.utils.getKotlin

getKotlin()
複製代碼

咱們只須要導入包,而後直接調用就能夠了。ui

可是咱們可能會有個疑問,若是咱們想要在Java中調用這個方法應該如何調用呢?spa

在Java中調用Kotlin頂層函數。3d

要想知道如何在Java中調用頂層函數其實很簡單,咱們只要將Kotlin反編譯一下就能夠了。下面介紹下如何反編譯Kotlin代碼 。code

第一步:在IDE中打開你須要查看反編譯的代碼文件,而後打開頂部的"Tools",選擇"Kotlin",再選擇"Show Kotlin ByteCode"cdn

在這裏插入圖片描述

第二步:點擊右側「Decompile」 對象

在這裏插入圖片描述

咱們會獲得另一個文件blog

在這裏插入圖片描述

經過以上的代碼能夠總結出兩點內容:

  1. 頂層文件會反編譯成一個容器類。(類名通常默認就是頂層文件名+"Kt"後綴,注意容器類名能夠自定義)
  2. 頂層函數會反編譯成一個static靜態函數,如代碼中的getKotlin函數

如今咱們應該知道如何在java代碼中如何調用了吧。

TestKt.getKotlin();
複製代碼

可能有時候你以爲Kotlin爲你自動生成的這個類名很差,那你能夠經過@file:JvmName註解來自定義類名,就像下面這樣。

@file:JvmName("MyKotlin")
package com.smartcentury.agriculturalmarket.utils

/**
 * @Author:         Simon
 * @CreateDate:     2019/5/16 16:04
 * @Description:
 */

fun getKotlin():String{
    return "Kotlin"
}
複製代碼

並且要注意,這個註解必須放在文件的開頭,包名的前面。

因而咱們在Java文件中能夠這樣調用

MyKotlin.getKotlin();
複製代碼

3.頂層屬性

瞭解了頂層函數,下面再看看頂層屬性。頂層屬性也就是把屬性直接放在文件頂層,不依附於類。咱們能夠在頂層定義的屬性包括var變量和val常量,就像下面這樣。

@file:JvmName("MyKotlin")
package com.smartcentury.agriculturalmarket.utils

/**
 * @Author:         Simon
 * @CreateDate:     2019/5/16 16:04
 * @Description:
 */


val name:String="kotlin"
var type:String="language"
複製代碼

用法和頂層方法同樣,這裏就不贅述了。

4.寫在最後

頂層屬性和方法可讓咱們的代碼更加簡潔,並且不須要引入多於的類。頂層函數在Kotlin裏面用法也很普遍,咱們最經常使用的let()方法就是頂層方法。後面會單獨講到Kotlin經常使用的頂層方法。

相關文章
相關標籤/搜索