Kotlin与Java相互调用的完整实例

作者:Lucky_William 时间:2023-06-17 03:23:23 

一、Kotlin 调用 Java

1. kotlin 关键字转义

java 中的方法或变量 是 kotlin 的关键字时,使用反引号 `` 对关键字进行转义


// 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));
   }
}

// 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 的可变数量参数


// kotlin
// 使用 * 号将 kotlin 的 数组 传给 java 的 可变数量参数
fun main() {
val arrayInt = intArrayOf(1, 2, 3)
demo.multiParams(*arrayInt) // [1, 2, 3]
}

3. kotlin 获取对象的 java 类


// kotlin
fun main() {
demo::class.java
   demo.javaClass
}

二、Java 调用 Kotlin

1. java 调用 kotlin 类的属性和方法


// kotlin
class KotlinDemo {
   var field: String = "kotlin field"
fun method() {
       println("call kotlin method")
   }
}

// 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 的顶级属性和顶级函数


// kotlin
val topLevelField: Int
   get() {
       println("call kotlin top level field")
       return 1
   }
fun topLevelFunc() {
   println("call kotlin top level function")
}

// java
public static void main(String[] args) {
TestCallEachOtherKt.getTopLevelField(); // call kotlin top level field
   TestCallEachOtherKt.topLevelFunc(); // call kotlin top level function
}

3. java 调用生成指定类名的 kotlin 属性和函数


// kotlin
// 指定文件生成的 Java 类或方法的名称。
@file:JvmName("CallKtDemo")
package com.william.testkt
var field: Int = 100
fun method() {
   println("call CallKtDemo method")
}

// java
public static void main(String[] args) {
System.out.println(CallKtDemo.getField());
   CallKtDemo.method();
}

4. java 调用 kotlin 的伴生对象的方法和静态方法


// kotlin
class TestCallKotlin {
companion object {
   // 模拟静态方法
       fun method1() {
           println("call method1")
       }
// 静态方法
       @JvmStatic
       fun method2() {
           println("call method2")
       }
   }
}

// java
public static void main(String[] args) {
TestCallKotlin.Companion.method1();
TestCallKotlin.method2();
}

5. java 调用 kotlin 单例类的方法


// kotlin
object KotlinObject {
fun method1() {
       println("call method1")
   }
@JvmStatic
   fun method2() {
       println("call method2")
   }
}

// java
public static void main(String[] args) {
KotlinObject.INSTANCE.method1();
   KotlinObject.method2();
}

6. java 调用 kotlin 含有 lambda 表达式参数的方法


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

// 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";
       }
   });
}

来源:https://blog.csdn.net/java_android_man/article/details/121879077

标签:java,调用,kotlin
0
投稿

猜你喜欢

  • VC对自定义资源加密解密(AES)的详解

    2023-01-10 00:27:15
  • 详细讲述Java中的对象转型

    2023-09-24 04:09:49
  • ShardingSphere解析SQL示例详解

    2023-11-23 13:57:55
  • java中利用List的subList方法实现对List分页(简单易学)

    2022-06-18 23:33:09
  • 详解C#中 Thread,Task,Async/Await,IAsyncResult的那些事儿

    2021-12-08 20:07:32
  • Spring框架中@PostConstruct注解详解

    2021-09-20 09:35:58
  • 详解Java springboot 整合Shiro框架

    2022-12-14 15:56:21
  • C#导入导出Excel数据的两种方法

    2021-07-01 02:29:54
  • string类的使用方法详解

    2022-04-05 12:01:51
  • JVM之方法返回地址详解

    2022-05-02 07:58:27
  • 19款Javascript富文本网页编辑器

    2021-12-08 23:48:45
  • C#移除字符串中的不可见Unicode字符 案例代码

    2023-04-28 19:06:06
  • java遍历Map的几种方法分析

    2023-12-04 22:34:27
  • 浅谈java获取UUID与UUID的校验

    2023-08-10 12:18:32
  • Android实现带数字的圆形进度条(自定义进度条)

    2023-07-19 21:37:20
  • Android仿微信键盘切换效果

    2022-05-01 08:06:41
  • Android开发之Android.mk模板的实例详解

    2022-02-20 09:11:44
  • Spring的连接数据库以及JDBC模板(实例讲解)

    2023-03-21 05:56:36
  • mybatis Interceptor对UpdateTime自动处理的实现方法

    2023-10-13 16:02:20
  • Android 利用 APT 技术在编译期生成代码

    2023-12-20 14:46:23
  • asp之家 软件编程 m.aspxhome.com