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
投稿
猜你喜欢
- 如下所示://读取json文件地址 /* String path = getClass().getClassLoader().g
- Java8 HashMap键与Comparable接口最容易使 HashMap 发生哈希冲突的方法是什么呢?我们可以创建一个类,让它的哈希函
- 1.实现如图所示的单选效果由于Android提供的单选按钮radiobutton只能单行或单列显示,且样式并不美观,故可用GridView进
- 选取单个元素直觉来说选取单个元素肯定会比选取多个要简单得多,不过这里也存在一些问题。我们先看下一般的做法的问题是什么,然后再看下如何用lam
- 前言最近看了一下 Android 上的图表控件,去年做过一款应用也已上架了,也用到了图表控件,但是只是按照官方 demo 集成了,并没有过多
- 1.饿汉模式饿汉模式也叫预加载模式,它是在类加载时直接创建并初始化单例对象,所以它并不存在线程安全的问题。它是依靠 ClassLoader
- 从一个问题引入如果你以前接触过C语言,那么对下面的这段代码一定很熟悉:#include <stdio.h>int main(vo
- 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的
- 本文实例讲述了Android实现Service重启的方法。分享给大家供大家参考。具体如下:做APP的时候,我们可能需要一个后台服务一直在运行
- QDownloadQDownload是基于Android平台实现的下载框架。API简洁易上手,只需5分钟即可实现一个多任务、多线程、断点下载
- weibo.java @Override &n
- 布局中listview要覆盖标题栏 int mTouchSlop = ViewConfiguration.get(this).getScal
- 本文实例讲述了Java线程同步方法。分享给大家供大家参考,具体如下:1. Semaphore1.1 二进制SemaphoreSemaphor
- 泛型中 T 类型变量 和 ? 通配符 区别定义不同 :T 是类型变量,? 是通配符使用范围不同:? 通配符用作 参数类型、字段类型、局部变量
- 本文实例为大家分享了C#生成唯一订单号的具体代码,供大家参考,具体内容如下根据GUID+DateTime.Now.Ticks生产唯一订单号/
- 《Android开发艺术探索》笔记:在Activity的onCreate()或者onResume()中去获得View的高度的时候不能正确获得
- 1.打开官网稍微学习一下,了解一下spring cloud是个什么东西,大概有哪些组件等https://spring.io/projects
- 今天去某在线教育面试面试官让做的一道题,题目描述如下:给定一个不重复的无序数组arr和一个定值num查找arr中是否有两个数的和等于num有
- 结构化查询语言(SQL)是一种标准化的语言,它允许你在数据库上执行操作,如创建项目,读取内容,内容更新和删除条目。SQL是所有可能会使用几乎
- RandomAccessFileRandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,