Kotlin 入门到进阶(34) -- Java 和 Kotlin 之间的交互

详细说明:https://zhuanlan.zhihu.com/p/27958831
注意事项:java 文件要放在 java 目录下

Kotlin2Java.kt

fun main() {
//    controlArray()
//    controlArrayVarArg()
//    getJavaClass()
    getJavaStaticPro()
}

fun demo(source: List<Int>) {
    val list = ArrayList<Int>()
    for (item in source) {
        list.add(item)
    }

    for (i in 0..source.size - 1) {
        list[i] = source[i]
    }

    source.forEach {
        list.add(it)
    }
}

fun controlArray() {
    val javaObj = JavaArrayExample()
    val array = intArrayOf(0,1,2,3)
    println("controlArray: ${array.size}")
    javaObj.removeIndices(array)
}

fun controlArrayVarArg() {
    val javaObj = JavaArrayExample()
    val array = intArrayOf(0,1,2,3)
    println("controlArrayVarArg: ${array.size}")
    javaObj.removeIndicesVarArg(*array)
}

fun getJavaClass() {
    val clazz = JavaArrayExample::class.java

    val javaObj = JavaArrayExample()
    val clazz2 = javaObj.javaClass

    println("clazz: ${clazz.name} ${clazz.`package`}  clazz2: ${clazz2.name} ${clazz2.`package`}")
}

fun getJavaStaticPro() {
    val staticVal = JavaArrayExample.STATIC_VAL
    println("staticVal: ${staticVal}")
}

//external fun getValFromJNI(): Int {
//    return 0
//}

Java2Kotlin.java

public class Java2Kotlin {

    public static void main(String[] args) {

        // Kotlin 属性交互
        KotlinClass kotlinClass = new KotlinClass();
        kotlinClass.getName();
        kotlinClass.setName("newName");

        kotlinClass.isOpen();
        kotlinClass.setOpen(true);

        // 包级函数
//        KotlinClassKt.kotlinFun();
        KotlinClassUtils.kotlinFun();

        // 获取 Kotlin 实例字段
        int kotlinID = kotlinClass.ID;
        System.out.println("kotlinID: " + kotlinID);

        // 获取 Kotlin 静态字段
        String kotlinStaticVal = KotlinClass.TAG;
        System.out.println("kotlinStaticVal: " + kotlinStaticVal);

        // 获取 Kotlin 对象、伴生对象
//        Singleton.properties = new Properties();
//        String mValue = Singleton.properties.getProperty("mKey");
//        System.out.println("mValue: " + mValue);
        Singleton.objStaticFunc();
        Singleton.INSTANCE.objInstanceFunc();

        // 使用 Kotlin 静态方法
        KotlinClass.staticFunc();
        KotlinClass.Companion.instanceFunc();

        // KClass
        KClass<KotlinClass> kClass = JvmClassMappingKt.getKotlinClass(KotlinClass.class);
        String kClassName = kClass.getSimpleName();
        System.out.println("kClassName: " + kClassName);

        // Java 调用 Kotlin 带异常的方法
        try {
            KotlinClassUtils.kotlinFunException();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容