Kotlin与Java相互调用的完整实例
Kotlin的设计过程中就考虑到了与Java的互操作性,在Kotlin中可以直接调用既有的Java代码,反过来在Java中也可以很流畅地使用Kotlin代码,这篇文章主要给大家介绍了关于Kotlin与Java相互调用的相关资料,需要的朋友可以参考下
目录
一、Kotlin 调用 Java
二、Java 调用 Kotlin
附 Github 源码:
总结
一、Kotlin 调用 Java
1. kotlin 关键字转义
java 中的方法或变量 是 kotlin 的关键字时,使用反引号 `` 对关键字进行转义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // java public class JavaDemo { String is; public String getIs() { return is; } public void setIs(String is) { this .is = is; } public void in() { System.out.println( "call java method in" ); } public void multiParams( int ... params) { System.out.println(Arrays.toString(params)); } } |
1 2 3 4 5 6 7 8 9 10 11 12 | // kotlin fun main() { // 1. java 中的方法或变量 是kotlin 的关键字时,使用反引号 `` 对关键字进行转义 val demo = JavaDemo() // 调用 java 的 is 属性,is 是 kotlin 的关键字,使用反引号转义 demo.`is` = "call java field" println(demo.`is`) // call java field // 调用 java 的 in 方法,in 是 kotlin 的关键字,使用反引号转义 demo.`in`() // call java method in } |
2. kotlin 可将数组传给 java 的可变数量参数
1 2 3 4 5 6 | // kotlin // 使用 * 号将 kotlin 的 数组 传给 java 的 可变数量参数 fun main() { val arrayInt = intArrayOf( 1 , 2 , 3 ) demo.multiParams(*arrayInt) // [1, 2, 3] } |
3. kotlin 获取对象的 java 类
1 2 3 4 5 | // kotlin fun main() { demo:: class .java demo.javaClass } |
二、Java 调用 Kotlin
1. java 调用 kotlin 类的属性和方法
1 2 3 4 5 6 7 8 | // kotlin class KotlinDemo { var field: String = "kotlin field" fun method() { println( "call kotlin method" ) } } |
1 2 3 4 5 6 | // java public static void main(String[] args) { KotlinDemo demo = new KotlinDemo(); System.out.println(demo.getField()); // kotlin field demo.method(); // call kotlin method } |
2. java 调用 kotlin 的顶级属性和顶级函数
1 2 3 4 5 6 7 8 9 10 | // kotlin val topLevelField: Int get() { println( "call kotlin top level field" ) return 1 } fun topLevelFunc() { println( "call kotlin top level function" ) } |
1 2 3 4 5 6 | // java public static void main(String[] args) { TestCallEachOtherKt.getTopLevelField(); // call kotlin top level field TestCallEachOtherKt.topLevelFunc(); // call kotlin top level function } |
3. java 调用生成指定类名的 kotlin 属性和函数
1 2 3 4 5 6 7 8 9 10 11 | // kotlin // 指定文件生成的 Java 类或方法的名称。 @file :JvmName( "CallKtDemo" ) package com.william.testkt var field: Int = 100 fun method() { println( "call CallKtDemo method" ) } |
1 2 3 4 5 | // java public static void main(String[] args) { System.out.println(CallKtDemo.getField()); CallKtDemo.method(); } |
4. java 调用 kotlin 的伴生对象的方法和静态方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // kotlin class TestCallKotlin { companion object { // 模拟静态方法 fun method1() { println( "call method1" ) } // 静态方法 @JvmStatic fun method2() { println( "call method2" ) } } } |
1 2 3 4 5 | // java public static void main(String[] args) { TestCallKotlin.Companion.method1(); TestCallKotlin.method2(); } |
5. java 调用 kotlin 单例类的方法
1 2 3 4 5 6 7 8 9 10 11 12 | // kotlin object KotlinObject { fun method1() { println( "call method1" ) } @JvmStatic fun method2() { println( "call method2" ) } } |
1 2 3 4 5 | // java public static void main(String[] args) { KotlinObject.INSTANCE.method1(); KotlinObject.method2(); } |
6. java 调用 kotlin 含有 lambda 表达式参数的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // kotlin object KotlinObject { // 参数为 lambda 表达式,入参为 Int,返回值为 Unit @JvmStatic fun method3(param: (Int) -> Unit = {}) { param.invoke( 101 ) } // 参数为 lambda 表达式,入参为 Boolean,返回值为 String @JvmStatic fun method4(param: (Boolean) -> String = { "" }) { param.invoke( true ) } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // java public static void main(String[] args) { KotlinObject.method3( new Function1<Integer, Unit>() { @Override public Unit invoke(Integer integer) { System.out.println(integer); return null ; } }); KotlinObject.method4( new Function1<Boolean, String>() { @Override public String invoke(Boolean param) { System.out.println( "invoke param: " + param); return param ? "success" : "failed" ; } }); } |
附 Github 源码:
JavaDemo.java
TestCallKotlin.kt
TestCallEachOther.kt
总结
到此这篇关于Kotlin与Java相互调用的文章就介绍到这了
原文链接:https://blog.csdn.net/java_android_man/article/details/121879077
伪原创工具 SEO网站优化 https://www.237it.com/