Java反射调用kotlin中的类,Object类,Companion对象

Java反射调用kotlin中的类,Object类,Companion对象

1. Java反射调用kotlin中的普通类

kotlin普通类:

kotlin 复制代码
package com.common;
class TestNormal {
    fun get():String{
        return "Nolmal abc"
    }
    fun showNum(v:Int){
        println("Nolmal showNum:" + v)
    }
}

通过Java反射调用:

java 复制代码
public void testNormal() {
        try {
            Class c = Class.forName("com.common.TestNormal");
            Object ins = c.newInstance();
            System.out.println("object:" + ins);

            Method meth1 = c.getDeclaredMethod("get");
            Object r1 = meth1.invoke(ins);
            System.out.println("method1: " + meth1);
            System.out.println("r1:"+r1+", type: " + r1.getClass());

            Method meth2 = c.getDeclaredMethod("showNum", int.class);
            Object r2 = meth2.invoke(ins, 10086);
            System.out.println("meth2: " + meth2);
            System.out.println("r2: " + r2);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2. Java反射调用kotlin中的Object类

kotlin普通类:

kotlin 复制代码
package com.common;
object TestRef {
    fun get():String{
        return "TestRef abc"
    }
    fun showNum(v:Int){
        println("TestRef showNum:" + v)
    }
}

通过Java反射调用:

java 复制代码
public void testObject() {
        try {
            Class c = Class.forName("com.common.TestRef");

            Field insField = c.getDeclaredField("INSTANCE");
            Object ins = insField.get(null);
            System.out.println("object:" + ins);

            Method meth1 = c.getDeclaredMethod("get");
            Object r1 = meth1.invoke(ins);
            System.out.println("method1: " + meth1);
            System.out.println("r1:"+r1+", type: " + r1.getClass());

            Method meth2 = c.getDeclaredMethod("showNum", int.class);
            Object r2 = meth2.invoke(ins, 10086);
            System.out.println("meth2: " + meth2);
            System.out.println("r2: " + r2);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

3. Java反射调用kotlin中的Companion对象

kotlin普通类:

kotlin 复制代码
package com.common;
class TestCom {
    companion object {
        fun get():String{
            return "TestCom abc"
        }
        fun showNum(v:Int){
            println("TestCom showNum:" + v)
        }
    }
}

通过Java反射调用:

java 复制代码
public void testCompanion() {
        try {
            Class c = Class.forName("com.common.TestCom$Companion");

            Object ins = Class.forName("com.common.TestCom").getField("Companion").get(null);

            Method meth1 = c.getDeclaredMethod("get");
            Object r1 = meth1.invoke(ins);
            System.out.println("method1: " + meth1);
            System.out.println("r1:"+r1+", type: " + r1.getClass());

            Method meth2 = c.getDeclaredMethod("showNum", int.class);
            Object r2 = meth2.invoke(ins, 10086);
            System.out.println("meth2: " + meth2);
            System.out.println("r2: " + r2);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
相关推荐
QING6187 分钟前
Jetpack Compose Brush API 简单使用实战 —— 新手指南
android·kotlin·android jetpack
小毅&Nora20 分钟前
【后端】【C++】从裸指针到 C++20 协程:现代 C++ 内存与并发编程的双重革命
java·c++20
张np25 分钟前
java基础-ArrayList
java·开发语言
Swizard25 分钟前
别让 AI 假装在工作:Android "Vibe Coding" 的生存指南
android·java·vibe coding
BBB努力学习程序设计33 分钟前
Java集合框架:管理数据的"超级工具箱"
java
库库林_沙琪马1 小时前
1、Hi~ SpringBoot
java·spring boot·后端
不会编程的小寒1 小时前
C / C++ 面试题
java·开发语言
BBB努力学习程序设计1 小时前
Java输入输出:让程序能与世界“对话”
java
电饭叔1 小时前
《python语言程序设计》2018版--第8章14题利用字符串输入作为一个信用卡号之一(Luhn算法解释)
android·java·python
阿宁又菜又爱玩1 小时前
Web后端开发入门
java·spring boot·后端·web