天天看點

Kotlin學習筆記(二):Kotlin與Java代碼的差別與互調

一、主函數

// java中的主函數
public static void main(String[] args){
    
}

//kotlin中的主函數
fun main(args: Array[String]){

}
           

二、Kotlin與Java互動的文法變化

Kotlin

中的方法可以不需要寫在類中,可以直接寫在檔案中,然後在

Java

代碼中可以通過

Kotlin

檔案名加上

Kt

字尾,然後直接

.xxx()

調用該方法,例如

//Kotlin檔案中的方法(檔案名為Utils)
fun printName(str: String){
    println("Hello $str")
}
 
//在Java類中直接調用
public static void main(String[] args){
    UtilsKt.printName("irving");
}
           

因為

Kotlin

檔案中的變量和方法都會被編譯為

public static

的,是以可以直接對應的類名加方法名調用。

三、Kotlin中的特殊語句object

Kotlin

中可以通過

object

聲明一個匿名内部類,通過此類可以實作單例模式,構造方法預設為

private

/**
 * 在kotlin檔案中通過object定義一個匿名内部類
 */
object Test{
    fun printLen(str: String){
        println("Hello $str")
    }
}

/**
 * 在Java中調用此匿名内部類的方法
 */
public static void main(String[] args){
    Test.INSTANCE.printLen("Irving");
}

/**
 * 在Kotlin中調用此匿名内部類的方法
 */
fun main(args: Array[String]){
    Test.printLen("lrving")   
}

           

四、Kotlin需要傳Class參數時

Kotlin

編譯後形成的

Class

檔案和

Java

編譯後形成的

Class

檔案格式不一樣(

Kotlin

編譯後為

KClass

),是以在

Kotlin

中需要使用

Java

或者

Kotlin

Class

作為參數時也有所不同。

/**
 * 現在有一個Java類JavaMain和一個Kotlin類KotlinMain,在Kotlin檔案中有兩個方法分别以  *  這兩個類的Class或KClass為參數。
*/
fun testClass(clazz: Class<JavaMain>){
    println(clazz.simpleName())
}

fun testKClass(clazz: KClass<KotlinMain>){
    println(clazz.simpleName())
}

//主方法中測試
fun main(args: Array[String]){
    testClass(JavaMain::Class.java)
    testKClass(KotlinMain::Class)
}
           

通過代碼很容易看出,第一個差別為

Java

對應的

Class

Class

Kotlin

對應的為

KClass

。第二個差別為使用

Java

Class

作為參數時格式為

類名::Class.java

,使用

Kotlin

KClass

作為參數時格式為

類名::Class

五、關鍵字沖突

Java

中定義的變量名與

Kotlin

中的關鍵字名發生沖突時,在

Kotlin

中調用該變量時需要用

''

包起來。

/**
 * Java類中定義了一個變量 in (該類名為Test),該變量名與Kotlin中的關鍵字名發生沖突。
 */
public static final String in = "Hello World";

/**
 * 需要在Kotlin中調用該變量時,用  '' 包起來。
 */
fun main(args: Array[String]){
    println(Test.'in')
}

           

繼續閱讀