千家信息网

Java与Kotlin互调怎么实现

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要讲解了"Java与Kotlin互调怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java与Kotlin互调怎么实现"吧!一、Kt调
千家信息网最后更新 2025年01月19日Java与Kotlin互调怎么实现

这篇文章主要讲解了"Java与Kotlin互调怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java与Kotlin互调怎么实现"吧!

一、Kt调用-Java参数非null的处理

@NotNull

class TestJava {    public void toNotNull(@NotNull String title) {}    public void toNull(String title){}}

Kotlin中调用

二、Kt调用- Java中使用kt关键字声明的变量和方法

kotlin中调用java方法,参数时,如果含有Kotlin关键字,必须增加 反引号 ``

public Object object;//使用kotlin中关键字命名的方法public void is() {}

Kotlin中调用

 testJava.`is`() testJava.`object`

三、Kt调用Java-SAM转换

在Kotlin中调用带有接口参数的方法时,如果这个接口只有一个方法,那么就可以通过 lambda 表达式实现 SAM转换,从而简化我们的代码。

示例如下:

public class TestJavaSam {      void singleFun(@NotNull IListener iListener) {}    void noParameter( @NotNull IListener iListener,int sum) {}    void noParameterClean(int sum,@NotNull IListener iListener) {}}interface IListener {    void onClick();}

在Kotlin中调用

fun main() {    val sam = TestJavaSam()    sam.singleFun {    }    sam.noParameter({            //如果更改一下java方法参数的顺序,那么就会更简洁,如下    },123)    sam.noParameterClean(123){    }}

四、Kt中禁止Java调用某方法

@JvmSynthetic

Kotlin中,有些方法并不想暴露给Java调用,这时就可以增加这个注解在方法上。

@JvmSyntheticfun toMain() {}

此时toMain() 在Java中将无法调用到。

五、Java调用Kt-扩展函数

@file:JvmName("xx")

在java中使用Kotlin的扩展函数时,我们都会使用相应的类名+Kt 去调用相关的方法,有时候我们想自定义相应的工具类,就显得稍显麻烦,如下:

比如我们有一个顶级扩展函数,位于 UiExpand.kt 中:

fun Int.px() {}**Java中调用 **  //Java调用kotlin类-(UiExpand)-Int.px() 扩展方法  UiExpandKt.px(20);

如上所示,在Java中调用时,我们必须已文件名+kt后缀才可以调用。

通过给 UiExpand.kt 包名上增加 @file:JvmName("Ui"),我们就可以实现自定义生成的类名去调用

如下:

Ui.px()

六、Java调用kt-成员变量

@JvmField

在Java中,我们去调用Kotlin 的 成员变量 时,编译器都会帮我们自动生成相应的 get,set方法,这很符合Java Bean的写法,但是有些是有我们只是想直接去调用,这个时候就可以这样去做。

Kotlin

data class TestKotlinBean(  @JvmField val message: String,   @JvmField val title: String)**Java中调用 ** TestKotlinBean testKotlinBean = new TestKotlinBean("",""); String message = testKotlinBean.message; String title = testKotlinBean.title;

当然对于 如下的示例,就算不用增加上面的注解,在java也都是可以直接调用,免除get,set

lateinit var sum: Stringobject UserPicCache{        const val KEY_CACHE = "CACHE" }

@get:JvmName,@set:JvmName

有些时候,我们只是想让其生成其中的一个set或者get方法,这个时候就可以使用上述注解。

Kotlin

data class TestKotlinBean(    @set:JvmName("setMessage")    var message: String,    @get:JvmName("getTitle")    val title: String)

Java中调用:

 TestKotlinBean testKotlinBean = new TestKotlinBean("", ""); testKotlinBean.setMessage("message"); testKotlinBean.getTitle();

七、Java调用Kt-伴生对象

@JvmStatic

当我们在Java中调用 Kotlin 伴生对象的方法或者变量时,必须通过 类名.Companion.xx 的方式才可以调用。这时候,我们就可以增加

@JvmStatic 来直接调用。

Kotlin

class Log {    companion object {        var time: String = ""        fun toLog() {        }    }}

在Java中调用:

 ToLog.toLog(); ToLog.getTime();

不过需要注意的是,@JvmStatic 对性能没有任何提升,因为相应的,编译器又生成了一个静态方法,对于可变变量,会生成两个静态方法set,get。

八、Java调用Kt-方法默认参数值

@JvmOverloads

在Kotlin中,对于方法参数,我们可能会加入一些默认值,便于更好的使用,但是在Java中,如果调用时不传递相应的方法参数,就会提示报错,这种使用就可以使用@JvmOverloads 修饰方法。

kotlin

object DialogUtils {    @JvmStatic    @JvmOverloads    fun showPromptDialog(title: String = "提示") {    }}

在java中调用

DialogUtils.showPromptDialog();DialogUtils.showPromptDialog("标题");

感谢各位的阅读,以上就是"Java与Kotlin互调怎么实现"的内容了,经过本文的学习后,相信大家对Java与Kotlin互调怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

方法 参数 变量 生成 关键 关键字 函数 时候 注解 类名 学习 内容 只是 对象 成员 接口 示例 编译器 静态 提示 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 罗村软件开发培训费用 金山文档本地部署服务器 掌阅kindle服务器异常 服务器多副本 网络安全工程师关键力 焦作众人网络技术有限公司 十大网络安全上市公司金桥 科技有限公司 软件开发 计算机软件开发交印花税 电子商务网络安全解决措施 服务器系统报价 C语言和网络安全结合 审计数据库结论怎么写 车辆管理数据库设计说明书 带薪培训软件开发 网络安全伴我行征文比赛500字 确保冬奥会期间网络安全 焦作市富威网络技术有限公司 筑牢网络安全防火墙心得体会 pr媒体缓存数据库能修改位置吗 软件开发3年一跳槽 网络安全对数学和英语要求 湖南美音网络技术拥有安防证书 大学生网络安全的重要性 景泰艺梦网络技术 广州应用软件开发报价 电脑坦闪连接服务器失败怎么办 校园网络安全技术大全 省级数字家庭管理平台服务器认证 自然资源三维立体时空数据库运用
0