天天看点

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')
}

           

继续阅读