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

上一篇下一篇

猜你喜欢

热点阅读