从Java调用Kotlin内联函数 [英] Call Kotlin inline function from Java

查看:21
本文介绍了从Java调用Kotlin内联函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Exceptions.kt:

@Suppress("NOTHING_TO_INLINE")
inline fun generateStyleNotCorrectException(key: String, value: String) =
        AOPException(key + " = " + value)

在科特林:

fun inKotlin(key: String, value: String) {
    throw generateStyleNotCorrectException(key, value) }

它可以在Kotlin中工作,并且该函数是内联的。

但在Java代码中使用时,它不能内联, 和仍然正常的静态方法调用(从反编译的内容中可以看到)。

类似以下内容:

public static final void inJava(String key, String value) throws AOPException {
    throw ExceptionsKt.generateStyleNotCorrectException(key, value);
// when decompiled, it has the same contents as before , not the inlined contents.
}

推荐答案

Java文件不支持由kotlin编译器完成的内联,因为Java编译器不知道此转换(请参阅this answer以了解为何具体化泛型在Java中根本不起作用)。

对于内联的其他用例(最常见的情况是将lambda作为参数传入),正如您已经发现的,字节码包括public static方法,因此仍然可以从Java调用内联函数。但是,在这种情况下,不会发生内联。

这篇关于从Java调用Kotlin内联函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆