我宣告了一個行內類
@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 方法名稱是“creator-9k1ZQyY”。后綴“-9k1ZQyY”是由 kotlin 編譯器添加的,我知道為什么 kotlin 編譯器會這樣做。
這個后綴對于位元組碼生成器非常重要。
我的問題:
如果介面和行內類是穩定的,kotlin編譯器能保證后綴也穩定嗎?那個后綴和kotlin-compiler的版本沒有關系嗎?
uj5u.com熱心網友回復:
檔案似乎表明修改是穩定的:
通過向函式名稱添加一些穩定的哈希碼來破壞使用行內類的函式
正如同一個檔案中所指出的,修改方案在 Kotlin 編譯器的 1.4.30 版本中發生了一次更改,但我認為它仍然非常穩定。他們甚至提供了一個標志來使用舊方案生成二進制兼容代碼,所以我假設它不僅不太可能再次更改,而且即使發生更改,也肯定會通過某種方式來保持兼容性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411482.html
標籤:
上一篇:java.lang.NullPointerException:mainRvRef不能為null,其中mainRvRef參考reyclerView
下一篇:Kotlin中的緊湊空值檢查?
