新年
快乐
最新公告
  • 欢迎您光临码巴巴,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • java 反射动态调用任意方法(有参数,无参数)

    可以通过http请求,访问到后台控制层,进行控制调用的是哪个方法

    这里使用Scanner 进行模拟请求参数

    package com.xy.refl;
    
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    public class ExcuteMethod {
                public static void main(String[] args) throws Exception {
                    
                    /*
                     * 通过反射动态调用方法
                     * 
                     * 可控制台输入方法,方法就可以被调用
                     */
                    
                    Scanner scanner = new Scanner(System.in);
                    System.out.println("请输入要执行的方法");
                    
                    /**
                     * 通过反射查询所有的方法
                     * 
                     * 		 javac     ClassLoader     
                     * 源代码  === .class  ===》 JVM虚拟机中
                     */
                    Class clazz = Class.forName("com.xy.pojo.Person");
                    
                    int i =1;
                    
                    Method [] methods = clazz.getMethods(); 
                    for(Method method: methods) {
                        System.out.println((i++) + ":" + method.getName());
                        
                    } 
                    /**
                     * 实例化对象
                     */
                    Object object = clazz.newInstance();
                    
                    
                    /**
                     * 接受要执行的方法
                     */
                    int methodStr = scanner.nextInt();
                    
                    
                    Method method = methods[methodStr -1 ];
                    /**
                     * 判断是否有参数
                     * method.getParameterCount:获取方法参数的个数
                     *  
                     */
                    int paramCount = method.getParameterCount();
                    
                    
                    /**
                     * 存储参数的集合
                     */
                    List<Object> paramList = new ArrayList<Object>();
                    if(paramCount  != 0) {
                        for(int y=0;y<paramCount;y++) {
                            System.out.println("请输入第" + (y +1) + "几个参数值");
                            paramList.add(scanner.next()); 
                        }
                    
                    
                        
                        /**
                         * 检查类型,并将参数转变为对应的类型
                         */
                        Object[] toTypeValue =  new Object[paramCount];
                        Class<?>[] paramClass =   method.getParameterTypes();
                        for(int x=0;x<paramClass.length;x++) { 
                            
                            /**
                             * method.getParameterTypes 获取参数类型的
                             * 参数类型来进行类型转换
                             */
                            Class paramCla = paramClass[x]; 
                            if(paramCla.getName().equals("java.lang.String")) {
                                toTypeValue[x] = paramList.get(x) + "";	;
                            }
                            if(paramCla.getName().equals("int")) {
                                 
                                toTypeValue[x] = Integer.parseInt(paramList.get(x) + "") ;	 
                            }
                          
                        }
                        
                        /**
                         * 声明方法,调用方法
                         */
                        Method paramMethod = clazz.getMethod(method.getName(),paramClass); 
                        paramMethod.invoke(object,toTypeValue);
                        
                        
                    
                    }else {
                        method.invoke(object); 
                    } 
                    
                }
    }

    反射调用的类

    package com.xy.pojo;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.xy.annotation.MyAnnotation;
     
    
    public class Person {
                
        
        
         public static List <Person> personList = new ArrayList<Person>();
        public Person() {
            System.out.println("Person已经被实例化");
        }
        
        /**
         * public com.xy.pojo.Person()
            public com.xy.pojo.Person(java.lang.String)
    
         * @param name
         */
    
        
        public Person(String name) {
            this.name = name;
            System.out.println("Person已经被实例化----有参数");
        }
    
    
        @MyAnnotation(value = "12123")
        private  String name;
        
        public String age;
      
         
    
        public void play(String name,int age ,String like) {
            System.out.println(name + "人干饭!!!!!!!!!!!!");
        }
        
        
         
        
        
        public void sleep() {
            System.out.println("人睡觉!!!!!!!!!!!!");
        }
    
    
        
        public void addPerson(Person person) { 
            personList.add(person); 
            System.out.println("添加成功过");
        }
        
    
        public String getName() {
            return name;
        }
    
    
    
        public void setName(String name) {
            this.name = name;
        }
    
    
    
        public String getAge() {
            return age;
        }
    
    
    
        public void setAge(String age) {
            this.age = age;
        }
    
    
    
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + "]";
        }
        
        
    }
    

     

    1. 本站所有资源来源于用户上传和网络,如有侵权请及时联系站长!

    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!

    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!

    5. 如有链接无法下载、失效或广告,请联系管理员处理!

    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!

    7. 如遇到加密压缩包,默认解压密码为"mababa.xin",如遇到无法解压的请联系管理员!


    码巴巴-优质代码创造者 » java 反射动态调用任意方法(有参数,无参数)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    一个高级程序员模板开发平台
    问问管理员?

    5 评论

    1. 这么6的代码,作者一定很帅吧

    2. 简直爱了!!!

    3. 作者大帅b

    4. 这代码,不去sun公司可惜了啊

    万水千山进行回复 取消回复

    • 17会员总数(位)
    • 41资源总数(个)
    • 1本周发布(个)
    • 0 今日发布(个)
    • 776稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    升级SVIP尊享更多特权立即升级