美文网首页
kotlin调用java重载参数问题

kotlin调用java重载参数问题

作者: 飞奔吧牛牛 | 来源:发表于2019-10-25 16:06 被阅读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

    相关文章

      网友评论

          本文标题:kotlin调用java重载参数问题

          本文链接:https://www.haomeiwen.com/subject/deosvctx.html