Вызовите встроенную функцию Kotlin из Java

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) } 

Он работает в котлине, и функция встроена.

Но при использовании в 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).

Что касается других вариантов использования inline (чаще всего при передаче в лямбда в качестве параметра), как вы уже обнаружили, байт-код включает public static метод, позволяющий встроенной функции вызывать из Java. В этом случае, однако, не происходит никакого наложения.