kotlin调用java重载参数问题
2019-10-25 本文已影响0人
飞奔吧牛牛
在java中整型数据类型包括基本数据类型int和包装数据类型Integer,但是在kotlin中表示整型的数据类型只有Int。这个Int类型,对应java中的int。在kotlin代码中调用java代码的重载方法时,会出现一些问题,比如在java中定义一个接口
public interface JavaInterface {
void print(int num);
void print(Integer num);
}
JavaA类继承JavaInterface接口
public class JavaA implements JavaInterface {
@Override
public void print(int num) {
System.out.println("int " + num);
}
@Override
public void print(Integer num) {
System.out.println("Integer " + num);
}
}
在kotlin中调用JavaA中的方法:
fun main() {
var javaA = JavaA()
javaA.print(20)
}
打印:
int 20
并没有调用print(Integer num)方法
我们尝试让kotlin类继承JavaInterface接口
class KotlinA : JavaInterface {
override fun print(num: Int) {
println("Int " + num)
}
}
发现只有一个方法被实现,或许在kotlin中认为 void print(int num);
和 void print(Integer num);是同一个方法?
如果想调用JavaA的 print(Integer num)方法应该怎么办呢?
这时候就必须用反射了
fun main() {
var javaA = JavaA()
javaA.javaClass.getMethod("print", Integer::class.java).invoke(javaA, 1)
}
打印:
Integer 1