我声明了一个内联类
@JvmInline
value class Creator<T>(val type: KClass<T>);,并声明了一个接口
interface Itf {
fun <T> creator(type: KClass<T>): Creator<T>;
}我希望通过asm(https://asm.ow2.io/ 1)生成字节码来实现这个接口。
我发现从字节码中解压缩的java方法是
public KClass<T> creator-9k1ZQyY();java方法名为“create-9k1ZQyY”。后缀“-9k1ZQyY”是由kotlin编译器添加的,我知道为什么kotlin编译器会这样做。
这个后缀对于字节码生成器非常重要。
我的问题是:
如果接口和内联类是稳定的,kotlin编译器能保证后缀也是稳定的吗?这个后缀和kotlin编译器的版本无关吗?
发布于 2022-01-14 11:10:22
医生们似乎认为这种破坏是稳定的:
使用内联类的函数通过在函数名中添加一些稳定的哈希码而损坏。
正如在同一文档中所指出的,Kotlin编译器的版本1.4.30已经更改了一次,但我认为它还是相当稳定的。他们甚至提供了一个标志来使用旧的方案来生成二进制兼容的代码,所以我假设它不仅不太可能再次改变,而且即使它改变了,它也肯定会以某种方式来保持兼容性。
https://stackoverflow.com/questions/70708918
复制相似问题