天天看点

Kotlin-2-与Java之间的互调Kotlin与Java之间的互调

目录

Kotlin与Java之间的互调

1、语法变化

1.1、kotlin的函数是可以写在类的外面的

1.2、java函数调用kotlin函数

1.3、kotlin匿名内部类的写法

1.4、对class的调用

2、Kotlin关键字处理

2.1、Kotlin中没有封装类

2.2、Kotlin类型null值敏感

2.3、Kotlin没有静态变量与静态方法

Kotlin与Java之间的互调

1、语法变化

1.1、kotlin的函数是可以写在类的外面的

fun outside(who:String) {
       //我在类的外面,MainActivity.kt文件的里面
       println("我是$who")
   }
class MainActivity : AppCompatActivity() {
    private fun inside() {
        //我在类的里面,
        outside("张三")
    }
}
           

1.2、java函数调用kotlin函数

如下图java函数如果想要调用kotlin中的函数就需要用kotlin 文件名+Kt 的形式来调用内部的函数。
Kotlin-2-与Java之间的互调Kotlin与Java之间的互调

1.3、kotlin匿名内部类的写法

文件目录
Kotlin-2-与Java之间的互调Kotlin与Java之间的互调
//K_Basis.kt文件中的内部类 
 object InsideClass1{
    fun sayMessage1(msg:String){
        print(msg)
    }
}
//MainActivity.kt文件中的内部类
class MainActivity : AppCompatActivity() {

    object InsideClass {
        fun sayHello(msg: String) {
            print(msg)
        }
    }
}
 //J_Basis.java中调用kotlin内部类的方法
public class J_Basis {
    /*
     * kotlin中的匿名内部类在编译过程中会生成一个INSTANCE的单例对象,
     * 并把自己的构造函数声明为private
     * (这也是kotlin中单例模式的书写方式)
     */
    public static void main(String[] args) {
        MainActivityKt.outside("张三");
        MainActivity.InsideClass.INSTANCE.sayHello("hello");
        InsideClass1.INSTANCE.sayHello1("hello1");
    }
}
           

1.4、对class的调用

/**

  * 1、当调用java的class的时候需要在后面加java标签

  * 2、kotlin调用kotlin类则不需要

  */

fun main() {
    testClass(J_Basis::class.java)
    testClass1(MainActivity::class)
}

fun testClass(javaClass:Class<J_Basis>){
}

fun testClass1(kotlinClass:KClass<MainActivity>){

}
           

2、Kotlin关键字处理

2.1、Kotlin中没有封装类

       就比如int的封装类Integer在kotlin中是没有,如下图testInteger()函数的参数Integer类型,但在kotlin中识别出来的类型是Int!这是一种兼容类型,kotlin自动将Integer类型转换成了自己能运行的兼容类型。

       那么怎么实现封装类呢?可以使用反射来实现封装类。

public class TestInteger {

    public static void testInteger(Integer integer) {
        System.out.print("integer=" + integer);
    }
    public static void testInteger1(int integer) {
        System.out.print("integer=" + integer);
    }
}
           
Kotlin-2-与Java之间的互调Kotlin与Java之间的互调

2.2、Kotlin类型null值敏感

Kotlin-2-与Java之间的互调Kotlin与Java之间的互调

2.3、Kotlin没有静态变量与静态方法

object InsideClass {

    @JvmStatic
    var name: String = "Zhang San"

    @JvmStatic
    fun writeName(name: String) {
        println("我的名字叫$name")
    }

    fun writeName1(name1: String) {
        println("我的名字叫$name1")
    }
}