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

网友投稿 361 2022-09-10


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

目录一、Kotlin 调用 java二、Java 调用 KotlitrrpcyNINn附 github 源码:总结

一、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[]http:// 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() {

@Override

public Unit invoke(Integer integer) {

System.out.println(integer);

return null;

}

});

KotlinObject.method4(new Function1() {

@Override

public String invoke(Boolean param) {

System.out.println("invoke param: " + param);

return param ? "success" : "failed";

}

});

}

附 Github 源码:

JavaDemo.java

TestCallKotlin.kt

TestCallEachOther.kt

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网站与域名知识(域名的使用)
下一篇:隔离器的功能和作用是什么 ameya隔离器采购价格(隔离器的功能和作用是什么呢)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~