当前位置:首页 > java > 正文内容

java invoke 的反射用法 及参数传递

root3年前 (2021-11-20)java1015
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class test {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
        System.out.println("Hello World!");
        Class<User> clas = User.class;
        Method m = clas.getMethod("method", String.class);
        m.invoke(null, "aa");//静态方法可省略对象,直接用null替代,或用clas

        m = clas.getDeclaredMethod("method", int.class);//非public方法要用declared获取
        m.setAccessible(true);//非public方法需要设置为可访问
        m.invoke(clas.newInstance(), 1);//非静态方法需要提供底层的类对象
    }
}

class User {
    public static void method(String s) {
        System.out.println(s);
    }

    private void method(int i) {
        System.out.println(i);
    }
}

不同元类的方式

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class test {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
        System.out.println("Hello World!");
        User us = new User();
        Method m = us.getClass().getMethod("method", String.class);
        m.invoke(us, "aa");//静态方法可省略对象,直接用null替代,或用clas
        m = us.getClass().getDeclaredMethod("method", int.class);
        m.setAccessible(true);//非public方法需要设置为可访问
        m.invoke(us, 1);//非静态方法需要提供底层的类对象

    }
}

class User {
    public static void method(String s) {
        System.out.println(s);
    }

    private void method(int i) {
        System.out.println(i);
    }
}



扫描二维码推送至手机访问。

版权声明:本文由一叶知秋发布,如需转载请注明出处。

本文链接:https://zhiqiu.top/?id=175

分享给朋友:

相关文章

java-Springboot的几个重要注解@controller、@service、 @repository、@component

1、@controller 控制器(注入服务)用于标注控制层,相当于struts中的action层2、@service 服务(注入dao)用于标注服务层,主要用来进行业务的逻辑处理3、@repository(实现dao访问)用于标注数据访问...

spring boot 删除kafka没有消费者的消费组

背景: 服务使用k8s 部署,服务逻辑是广播消费,即每个服务(pod)都会起一个消费组因为每个pod都是一样的,无法固定消费组。同时每次更新或者重启pod时消费组就会增多。时间旧了消费组就会消息堆积,消费组也会越来越多。在项目中启动一个定时...

java 发送http 请求

这里以post请求为例例1import cn.hutool.http.HttpRequest; public class HttpRequestUtil {    &...

java 对象内存分析工具 jmap

java 对象内存分析工具 jmap

jmap — 打印指定进程的共享对象内存映射或堆内存细节jmap 命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等。可...

java mybatis Parameter index out of range (5 > number of parameters, which is 4

java mybatis Parameter index out of range (5 > number of parameters, which is 4

该报错在修改mapper的xml之后出现的发现是因为注释的问题导致的在xml中注释已经要谨慎。...

java mybatis 语法之 foreach 对列表的处理

<delete id="batchDeleteEmps" parameterType="int"> delete from emp wh...