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();
        }
    }
相关推荐
__土块__9 分钟前
一次电商秒杀系统架构评审:从本地锁到分布式锁的演进与取舍
java·redis·高并发·分布式锁·redisson·架构设计·秒杀系统
她说..13 分钟前
Java 注解核心面试题
java·spring boot·spring·spring cloud·自定义注解
用户83071968408214 分钟前
Spring Boot @Qualifier深度解密:从“按名查找”到“分组批量注入”,一文掌握它的全部“隐藏技能”。
java·spring boot
亦暖筑序21 分钟前
Message 四分天下:Spring AI 如何统一消息格式
java·人工智能
镜花水月linyi26 分钟前
JDK 8 → 17 → 21 → 25:一次性讲清四代版本的关键跃迁
java·后端
0xDevNull39 分钟前
JDK 25 新特性概览与实战教程
java·开发语言·后端
Yiyi_Coding44 分钟前
BUG列表:如何定位线上 OOM ?
java·linux·bug
gelald44 分钟前
Spring - 循环依赖
java·后端·spring
凤山老林1 小时前
Java 开发者零成本构建 RAG 知识库:Spring AI Alibaba + Ollama 搭建本地 RAG 知识库
java·人工智能·知识库·rag·spring ai
爱码驱动1 小时前
文件操作和IO
java·开发语言·io·文件操作