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();
        }
    }
相关推荐
AOwhisky5 小时前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm
云云只是个程序马喽6 小时前
海外短剧平台搭建方案:私有化源码系统选型|云微短剧系统技术架构拆解
java·php
疏狂难除7 小时前
JetBrains IDE插件开发教程(五)——File Header
ide·kotlin
C137的本贾尼7 小时前
第七篇:消息队列(MQ)——就是个带存储的异步通信管道
java·开发语言·中间件
Flittly7 小时前
【AgentScope Java新手村系列】(19)多模态-图像音频视频
java·spring boot·spring
Javatutouhouduan8 小时前
国内大厂Java面试高频题库(2026突击版)
java·架构师·java面试·java面试题·后端开发·java程序员·java八股文
Tim_108 小时前
【C++】017、new/delete与malloc/free的区别
java·数据结构·算法
青山木8 小时前
一把 Redis 分布式锁,踩透四个坑:锁争抢、僵尸锁、锁过期、锁丢失
java·数据库·redis·后端
Java内核笔记8 小时前
万字避坑!Spring Boot 3.x 升 4.0 最全升级指南(附 Migration Checklist,建议收藏⭐)
java·后端
wuqingshun3141599 小时前
什么是代理模式?一般用在什么场景?
java·mysql·代理模式