忍痛转java_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.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.java "这个坑稍微有点复杂,这里的'Array'是'kotlin.Array',Java中“Class[].class”是一个Java数组类型,对应到kotlin中是"arrayOf>()::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.java)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值