У мене є вихідний файл Котліна, але я хочу перекласти його на Java.
Як можна перетворити Kotlin в джерело Java?
У мене є вихідний файл Котліна, але я хочу перекласти його на Java.
Як можна перетворити Kotlin в джерело Java?
Відповіді:
Як сказав @Vadzim, в IntelliJ або Android Studio вам просто потрібно зробити наступне, щоб отримати код Java від kotlin:
Menu > Tools > Kotlin > Show Kotlin Bytecode
Decompile
кнопкуОновлення:
З останньою версією (1.2+) плагіна Kotlin ви також можете безпосередньо це зробити Menu > Tools > Kotlin -> Decompile Kotlin to Java
.
Decompile Kotlin to Java
на даний момент увімкнено лише для складених класів Котліна .
Ви можете компілювати Котлін у байт-код, а потім використовувати розбиральник Java.
Декомпіляція може бути здійснена всередині IntelliJ Idea або за допомогою FernFlower https://github.com/fesh0r/fernflower (спасибі @Jire)
Не було автоматизованого інструменту, як я перевірив пару місяців тому (і жодних планів на один AFAIK)
Щоб конвертувати
Kotlin
вихідний файл уJava
вихідний файл, який потрібно (коли ви перебуваєте в Android Studio):
Натисніть Cmd- Shift- Aна Mac або натисніть Ctrl- Shift- Aна машині Windows.
Введіть потрібну дію: Kotlin Bytecode
і виберіть Show Kotlin Bytecode
меню.
Decompile
кнопку у верхній частині Kotlin Bytecode
панелі.Я компілюю Котлін в байт-код і потім декомпілюю його на Java. Я компілюю з компілятором Kotlin і декомпілюю з cfr .
Мій проект тут .
Це дозволяє мені скласти це:
package functionsiiiandiiilambdas.functions.p01tailiiirecursive
tailrec fun findFixPoint(x: Double = 1.0): Double =
if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
До цього:
package functionsiiiandiiilambdas.functions.p01tailiiirecursive;
public final class ExampleKt {
public static final double findFixPoint(double x) {
while (x != Math.cos(x)) {
x = Math.cos(x);
}
return x;
}
public static /* bridge */ /* synthetic */ double findFixPoint$default(
double d, int n, Object object) {
if ((n & 1) != 0) {
d = 1.0;
}
return ExampleKt.findFixPoint(d);
}
}
Як @ louis-cad згадав "джерело Котліна -> код байта Java -> Джерело Java" - єдине рішення поки що.
Але я хотів би зазначити спосіб, який я віддаю перевагу: використання декомпілятора Jadx для Android .
Це дозволяє бачити код, що генерується для закриттів, і, як на мене, отриманий код є "чистішим", а потім декомпілятором IntelliJ IDEA.
Зазвичай, коли мені потрібно побачити вихідний код Java будь-якого класу Котліна:
./gradlew assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
У цьому графічному інтерфейсі працює основний функціонал IDE: пошук класів, натисніть, щоб перейти до декларації. тощо.
Також увесь вихідний код можна зберегти та переглянути його за допомогою інших інструментів, таких як IntelliJ IDEA.
brew install jadx
Java і Kotlin працює на віртуальній машині Java (JVM).
Перетворення файлу Котліна в файл Java включає два етапи, тобто компіляцію котла Котліна в байт-код JVM, а потім декомпілюйте байт-код в код Java.
Кроки для перетворення вихідного файлу Котліна в вихідний файл Java: