【发布时间】:2017-03-28 16:41:46
【问题描述】:
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
}
}
还有一些其他问题,例如使用WhenMapping 的访问修饰符生成顶级类:
public class MyClass {
}
public final class MyClass$WhenMappings { //error, shouldn't be public
}
我检查了 Kotlin 和 IntelliJ 更新,我都使用了最新版本。
起初我认为这可能与编写不佳的 Kotlin 代码有关,但即使是最简单的代码文件似乎也需要某种在 Java 中非法的检查/生成。
问题
有没有办法确保反编译过程保持在 Java 语言规则的范围内?
【问题讨论】:
标签: java intellij-idea kotlin bytecode decompiling