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或者KotlinClass作为参数时也有所不同。

/**
 * 现在有一个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对应的ClassClassKotlin对应的为KClass。第二个区别为使用JavaClass作为参数时格式为类名::Class.java,使用KotlinKClass作为参数时格式为类名::Class

五、关键字冲突

Java中定义的变量名与Kotlin中的关键字名发生冲突时,在Kotlin中调用该变量时需要用 ''包起来。

/**
 * Java类中定义了一个变量 in (该类名为Test),该变量名与Kotlin中的关键字名发生冲突。
 */
public static final String in = "Hello World";

/**
 * 需要在Kotlin中调用该变量时,用  '' 包起来。
 */
fun main(args: Array[String]){
    println(Test.'in')
}

发布了167 篇原创文章 · 获赞 230 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_39240270/article/details/100836388