从Java调用Kotlin内联函数
Exceptions.kt:
@Suppress("NOTHING_TO_INLINE") inline fun generateStyleNotCorrectException(key: String, value: String) = AOPException(key + " = " + value)
在kotlin:
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. }
Kotlin编译器所做的内联不支持Java文件,因为Java编译器并不知道这种转换(请参阅关于为什么泛型泛型不能从Java工作的答案 )。
至于内联的其他用例(最常见的是传入一个lambda作为参数),正如你已经发现的那样,字节码包含了一个public static
方法,所以内联函数仍然可以从Java中调用。 但是,在这种情况下,不会发生内联。