一、主函數
// 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')
}