咱們都知道, Java 做爲 門面向對象的語言,須要全部的代碼都寫做類的函數。大多數狀況下,這種方式還能行得通。但事實上,幾乎全部的大型項目,最終都有不少的代碼並不能歸屬到任何 個類中。有時一個操做對應兩個不一樣的類的對象,並且重要性相差無幾。有時存在 個基本的對象,但你不想經過實例函數來添加操做,讓它的 API 繼續膨脹。結果就是,最終這些類將不包含任何的狀態或者實例函數,而是僅僅做爲一堆靜態函數的容器。在 JDK 中, 最適合的例子應該就是 Collections了。看看你本身的代碼,是否是也有一些類自己就以Util做爲後綴命名。 在kotlin中,根本就不須要去建立這些無心義的類, 相反,能夠把這些函數接放到代碼文件的頂層,不用從屬於任何的類。這些放在文件頂層的函數依然是包內的成員,若是你須要從包外訪問它,則須要 import 但再也不須要額外包一層。java
見名知意,原來在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
經過以上的代碼能夠總結出兩點內容:
如今咱們應該知道如何在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();
複製代碼
瞭解了頂層函數,下面再看看頂層屬性。頂層屬性也就是把屬性直接放在文件頂層,不依附於類。咱們能夠在頂層定義的屬性包括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"
複製代碼
用法和頂層方法同樣,這裏就不贅述了。
頂層屬性和方法可讓咱們的代碼更加簡潔,並且不須要引入多於的類。頂層函數在Kotlin裏面用法也很普遍,咱們最經常使用的let()方法就是頂層方法。後面會單獨講到Kotlin經常使用的頂層方法。