Java轉Konlit時碰到的坑

在把java文件轉換成konlit文件時碰到的坑,記錄一下。

Java code:

Method forName = Class.class.getDeclaredMethod("forName", String.class);
Method getDeclaredMethod = Class.class.getDeclaredMethod("getDeclaredMethod", String.class, Class[].class);

Kotlin code:

轉換當然用Android studio比較方便了,當然轉的質量沒保證,基本上都需要手動再修改的:
Android Studio -> Code -> Convert Java File to Kotlin File ->
轉換后得到的錯誤結果如下:

val forName = Class<*>::class.java.getDeclaredMethod("forName", String::class.java)
val getDeclaredMethod = Class<*>::class.java.getDeclaredMethod("getDeclaredMethod", String::class.java, Array<Class<*>>::class.java )

這里的 'String'指的是'kotlin.String',但是用反射的話我們需要的肯定是'java.lang.String',所以這是一個坑。
這里的"Class<>::class.java"會直接報錯:"only classes are allowed on the left hand side of a class literal"
這里需要改成"Class::class.java",這個坑也好解決。
關鍵是"Array<Class<
>>::class.java "這個坑稍微有點復雜,這里的'Array'是'kotlin.Array',Java中“Class[].class”是一個Java數(shù)組類型,對應到kotlin中是"arrayOf<Class<*>>()::class.java"。

最后修改后的正確結果如下:

val forName = Class::class.java.getDeclaredMethod("forName", java.lang.String::class.java)
val getDeclaredMethod = Class::class.java.getDeclaredMethod("getDeclaredMethod", java.lang.String::class.java, arrayOf<Class<*>>()::class.java)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容