Vin*_*igh 0 java decompiling bytecode intellij-idea kotlin
class CheckInventory(target: Target) : Command(target) {
}
Run Code Online (Sandbox Code Playgroud)
使用IntelliJ的" 显示Kotlin字节码 "选项反编译上述Kotlin代码时,它会在super()调用之上生成一个语句:
class CheckInventory extends Command {
public CheckInventory(Target target) {
Intrinsic.checkParameterIsNotNull(target, "target");
super(target); //error, must be first call
}
}
Run Code Online (Sandbox Code Playgroud)
还有一些其他问题,例如使用WhenMapping生成具有访问修饰符的顶级类:
public class MyClass {
}
public final class MyClass$WhenMappings { //error, shouldn't be public
}
Run Code Online (Sandbox Code Playgroud)
我检查了Kotlin和IntelliJ更新,我正在使用最新版本.
起初我认为它可能与写得不好的Kotlin代码有关,但即使是最简单的代码文件似乎也需要某种在Java中非法的检查/生成.
有没有办法确保反编译过程保持在Java语言规则的范围内?
不.IntelliJ IDEA中的Java反编译器是为反编译Java源代码而设计的.Kotlin编译器从Java编译器生成不同的字节码模式,因此Java反编译器并不总是生成有效Java代码的输出.
| 归档时间: |
|
| 查看次数: |
1130 次 |
| 最近记录: |