Kotlin与Java相互调用的完整实例
作者:Lucky_William 发布时间:2023-06-17 03:23:23
标签:java,调用,kotlin
一、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
0
投稿
猜你喜欢
- 参考:How to catch an Exception from a threadIs there a way to make Runna
- 前言之前我们提到了 CustomPaint er 的 Paint 可以使用渐变(GradientShader)来填充绘制的图形,本篇我们来介
- 项目概况:Spring Cloud搭的微服务,使用了eureka,FeignClient,现在遇到FeignClient调用接口时不支持上传
- 已知两个链表list1和list,2,各自非降序排列,将它们合并成另外一个链表list3,并且依然有序,要求保留所有节点。实现过程中,lis
- 过年微信红包很火,最近有个项目也要做抢红包,于是写了个红包的生成算法。红包生成算法的需求预先生成所有的红包还是一个请求随机生成一个红包简单来
- Console.WriteLine("This is a Client, host name is {0}", Dns.
- 前言之前用简书的时候一直是在web端,后来下载了客户端,看到了搜索的那个动画,就尝试的去写了,没写之前感觉挺容易的,写了之后,就感觉里面还是
- .c 源程序 ----- 编译 ----- 链接 ---- exe ----运行 -------->程序翻译环境和执行环境翻译环境:源
- 本Demo为练手小项目,主要是熟悉目前主流APP的架构模式.此项目中采用MVC设计模式,纯代码和少许XIB方式实现.主要实现了朋友圈功能和摇
- 1、volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)&nb
- 废话开篇:iOS与android在实现列表界面的时候是有重用机制的,目的就是减少内存开销,用时间换空间。个人感觉flutter并没有特别强调
- 1. 前言现在很多应用都有小悬浮窗的功能,比如看直播的时候,通过Home键返回桌面,直播的小窗口仍可以在屏幕上显示。下面将介绍下悬浮窗的的一
- 无论哪种界面框架输入文本框都是非常重要的控件, 但是发现flutter中的输入框TextField介绍的虽然多,但是各个属性怎么组合满足需要
- SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-
- 一. 线性表中的顺序表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见
- 在 fluro 中,定义路由处理器 Handler 时可以指定该页面的默认转场形式,或者在使用 navigateTo 方法是可以设置页面跳转
- 右击有main方法的类===> Run as===> Run Configurations ===>双击java
- 可以静态绑定数据源,这样就自动为DataGridView控件添加 相应的行。假如需要动态为DataGridView控件添加新行,方法有很多种
- 在本博客中,可以找到一篇《c#实现输出的字符靠右对齐的示例》它有教大家怎样实现字符串输出进行左齐或者是右对齐。本篇的方法,超简单,是使用st
- SharedPreferences介绍:SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置