Por que converter Kotlin para Java, se Kotlin é o "novo Java"?
\n\nParece um paradoxo: você escreve em Kotlin e depois quer obter código Java. Por quê? Na verdade, existem muitas situações. Você pode herdar um projeto escrito em Kotlin, mas sua equipe ainda não está pronta para migrar para ele. Ou você está estudando Kotlin através da comparação com Java — esta é uma das maneiras mais eficazes. Ou talvez você precise integrar uma biblioteca Kotlin em um projeto Java antigo e queira entender exatamente como funciona um determinado método.
\n\nDe qualquer forma, a pergunta "How to convert a Kotlin source file to a Java source file" é uma das mais populares no Stack Overflow (milhares de visualizações). E hoje vamos abordá-la do início ao fim. Você aprenderá como converter oficialmente (via IntelliJ IDEA) e não oficialmente (via descompilação) um arquivo .kt para .java, quais armadilhas esperam por você e o que fazer se nada funcionar.
1. Conversão direta: mito ou realidade?
\n\nJá avisamos: não existe conversão reversa Kotlin → Java "um para um". Kotlin não é apenas "açúcar" sobre Java, ele tem sua própria semântica: segurança contra nulos, corrotinas, funções de extensão, data classes. Java não conhece esse luxo. Portanto, qualquer conversor produzirá um código aproximado, que muitas vezes parece verboso e contém chamadas a funções internas do Kotlin (por exemplo, Intrinsics.checkNotNullParameter()).
Mas isso não significa que a tarefa seja impossível. Existem três abordagens principais:
\n\n- \n
- Descompilação de bytecode — o método mais preciso, integrado ao IntelliJ IDEA e Android Studio. \n
- JADX — para desenvolvedores Android, quando não há código-fonte, mas há um APK. \n
- Conversores online — uma opção rápida para pequenos trechos. \n
2. Método nº1: Descompilação via IntelliJ IDEA (o mais confiável)
\n\nSe você tem o arquivo .kt original, pode abri-lo no IntelliJ IDEA (ou Android Studio) e pedir para a IDE mostrar o código Java equivalente. Como fazer isso?
\n\nPasso 1. Abra o arquivo Kotlin
\nSuponha que temos uma classe simples em Kotlin:
\n\n// File: Person.kt\ndata class Person(val name: String, val age: Int) {\n fun greet() = "Hello, my name is $name"\n}\n\nPasso 2. Execute a descompilação
\nNo menu do IntelliJ, selecione Tools → Kotlin → Show Kotlin Bytecode. Um painel com o bytecode será aberto. Neste painel, clique no botão Decompile — e você verá a versão Java do seu arquivo.
\n\nAqui está o que a IDE exibirá para o nosso Person.kt:
// Descompilação Java\npublic final class Person {\n @NotNull\n private final String name;\n private final int age;\n\n @NotNull\n public final String getName() {\n return this.name;\n }\n\n public final int getAge() {\n return this.age;\n }\n\n public Person(@NotNull String name, int age) {\n Intrinsics.checkNotNullParameter(name, "name");\n super();\n this.name = name;\n this.age = age;\n }\n\n @NotNull\n public final String greet() {\n return "Hello, my name is " + this.name;\n }\n\n // equals(), hashCode(), toString() — gerados automaticamente\n}\n\nImportante: O código contém chamadas a Intrinsics — isso faz parte do runtime do Kotlin. Se você copiar esse código para um projeto sem dependências do Kotlin, ele não compilará. Será necessário adicionar kotlin-stdlib ou remover manualmente essas verificações.
3. Método nº2: JADX — para Android sem código-fonte
\n\nSe você tem apenas um arquivo APK e quer entender como uma determinada classe Kotlin foi implementada, use JADX. É um descompilador que transforma bytecode DEX em código Java legível. As classes Kotlin em um APK ainda são compiladas para bytecode JVM, então o JADX dará conta do recado.
\n\nExemplo: você encontrou uma classe com uma corrotina no APK. Em Kotlin, isso pode se parecer com