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