快速學習Kotlin(二)Kotlin與Java的兼容

Kotlin

與Java的互相調(diào)用

由于Java與Kotlin是100%共通的,所以他們可以進行相互的調(diào)用。那么在Kotlin中聲明了一個函數(shù),在Java中該如何調(diào)用這個函數(shù)呢?

假設(shè)我們在KotlinDemo.kt文件里寫一個Kotlin的函數(shù)

fun getMessage(str:String):String{

    return str;
}

這個時候我們又新建一個Java文件名字叫做JavaDemo,那么我們?nèi)绾握{(diào)用在KotlinDemo.kt文件里的getMessage()這個函數(shù)呢?

    public static void main(String[] args){
        KotlinDemoKt.getMessage("hello world");
    }

其實很簡單,我們看到,我們只需要在java文件中用Kotlin中文件中文件名加上需要調(diào)用的函數(shù)名即可以調(diào)用這個函數(shù)。格式為:

Kotlin文件名 . 需調(diào)用函數(shù)名

這樣就可以在Java中調(diào)用Kotlin函數(shù)了。

Kotlin中匿名內(nèi)部類

在Kotlin中也有匿名內(nèi)部類的概念。一般書寫匿名內(nèi)部類,我們都是使用" object + 類型 + 大括號 ",之后再跟上需要寫的函數(shù)來處理。

object Test{
    fun sayHello(){
        print("hello!!");
    }
}

而在Kotlin中使用匿名內(nèi)部類也很簡單,直接使用類型 . 函數(shù)名即可使用

//在kotlin中使用

fun getTest(){
    Test.sayHello();
}

而在Java中如何使用呢?其實也非常簡單

    //Java中使用Kotlin的匿名內(nèi)部類

    public static void main(String[] args){
        Test.INSTANCE.sayHello();
    }

看到,通過類型 + INSTANCE + 函數(shù)名稱,即可調(diào)用Kotlin中的匿名內(nèi)部類了。這里強調(diào)一下,在Kotlin中是沒有靜態(tài)變量和靜態(tài)方法這個概念的,也就是說Kotlin中沒有static這個關(guān)鍵字。那么如果我們想要在Kotlin中擁有一個類似于Java中public static的方法該怎么辦呢?其實這個也很簡單,我們只需要一個修飾符 @JvmStatic來進行修飾sayHello函數(shù)即可。

object Test{
    @JvmStatic
    fun sayHello(){
        print("hello!!");
    }
}

這樣sayHello就變成了靜態(tài)方法,在Java中使用這個方法可以直接使用Test.sayHello() 而不用使用INSTANCE去處理。

kotlin關(guān)鍵字處理

我們知道在Java中關(guān)鍵詞是不能用來作為聲明的變量名來使用的,例如你不能使用if或者static等來作為變量名,而在Kotlin中也是如此。但是在Kotlin中有些關(guān)鍵字在Java中沒有,并不作為關(guān)鍵詞。那么如果在Java中使用了Kotlin里面的關(guān)鍵字在Kotlin中該如何處理呢?

假設(shè),在Java中是沒有in這個關(guān)鍵字的,所以我們在Java中用in來聲明一個變量

//Java中的代碼

public static String in = "this is in";

而在Kotlin中我們需要調(diào)用這個in變量,那么我們可以這么處理

//在Kotlin中代碼

fun getTest(){
    print(JavaDemo.`in`);
}

我們看到,我們用兩個反引號來包裹了這個in,兩個反引號代表轉(zhuǎn)義的意思,就像Java中的兩個反斜杠一樣,都是用來轉(zhuǎn)義一些關(guān)鍵字或者特殊符號的作用。

以上就是kotlin與Java在兼容方面需要注意的地方。

封裝類

我們先來看下面代碼

    //Java代碼

    public static JavaDemo  javaDemo = new JavaDemo();

    public void getInt(int a){
        System.out.println("int");
    }

    public void getInt(Integer a){
        System.out.println("Integer");
    }

我們寫了兩個名字相同的方法,并且傳入了不同的參數(shù)類型,一個是基本數(shù)據(jù)類型,一個是封裝類型。那么如果在Kotlin中如何調(diào)用程序會走哪個方法呢?

    fun test(){
        JavaDemo.javaDemo.getInt(100);
    }

    //輸出結(jié)果
    int

結(jié)果我們發(fā)現(xiàn)他輸出的是第一個結(jié)果int而不是第二個Integer。在Kotlin中其實是沒有封裝類這個概念的,他只有基礎(chǔ)數(shù)據(jù)類型。他的基礎(chǔ)數(shù)據(jù)類型如下:

類型 字節(jié)數(shù)
Double 64
Float 32
Long 64
Int 32
Short 16
Byte 8

注意,String并不屬于基礎(chǔ)數(shù)據(jù)類型。這點和Java是一樣的。

數(shù)據(jù)類型的轉(zhuǎn)換

假設(shè)有這么一種情況,需要將一個String類型的轉(zhuǎn)換為Int類型,一般在Java中我們可以使用封裝類來處理

    public void test(){
        String b = "1";
        int i = Integer.parseInt(b);
    }

但是在Kotlin中是沒有封裝類的,那么我們?nèi)绾翁幚恚?/p>

    var str:String = "1";
    var i : Int = str.toInt();

我們可以通過 to + 需要轉(zhuǎn)換的類型來進行類型不同之間的轉(zhuǎn)換。

每個數(shù)字類型支持如下的轉(zhuǎn)換:

  • toByte(): Byte

  • toShort(): Short

  • toInt(): Int

  • toLong(): Long

  • toFloat(): Float

  • toDouble(): Double

  • toChar(): Char

如果覺得我的文章能夠幫助到你,也歡迎關(guān)注我的微信公眾號「晨雨細曲」,有新技術(shù)和知識會推送在這上面。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容