Kotlin Decompiler生成错误的代码 – 是否有可能防止?

class CheckInventory(target: Target) : Command(target) { } 

使用IntelliJ的“ 显示Kotlin字节码 ”选项反编译上述Kotlin代码时,它会在super()调用之上继续生成一个语句:

 class CheckInventory extends Command { public CheckInventory(Target target) { Intrinsic.checkParameterIsNotNull(target, "target"); super(target); //error, must be first call } } 

还有其他一些问题,如使用访问修饰符生成顶级类的时候:

 public class MyClass { } public final class MyClass$WhenMappings { //error, shouldn't be public } 

我检查了Kotlin和IntelliJ更新,我正在使用最新版本。

起初,我认为这可能与编写不好的Kotlin代码有关,但即使是最简单的代码文件似乎也需要某种在Java中非法的检查/生成。

有什么方法可以确保反编译过程保持在Java语言规则的范围之内吗?

不可以。IntelliJ IDEA中的Java反编译器专门用于反编译Java源代码。 Kotlin编译器从Java编译器生成不同的字节码模式,所以Java反编译器并不总是生成有效的Java代码。