zoukankan      html  css  js  c++  java
  • java反射知识相关的文章

    整理的反射相关的文章:

    (1)、通俗理解反射(知乎):学习java应该如何理解反射?

    (2)、关于反射比较深入的博文地址:  深入解析Java反射(1) - 基础

    贴出我反射调用代码:(craw,dept 就是两个属性包含Id的类)

            CrawlingTagsThumbnail craw = new CrawlingTagsThumbnail();
            craw.setId(1L);
    Dept dept
    =new Dept(); dept.setId(222);
         
         //调用下面的invoke方法   invoke(CrawlingTagsThumbnail.
    class,craw); invoke(Dept.class,dept);


    private void invoke(Class<?> clazz,Object o) throws Exception{

    ////创建clazz的实例
    //Object target = clazz.newInstance();
    ////这里可以把传入参数赋值到新的实例中(如果有需要)
    // BeanUtils.copyProperties(o,target);

    //获取clazz类的getId方法
    Method method = clazz.getMethod("getId");
    //调用method对应的方法 => add(1,4)
    Object result = method.invoke(o);
    System.out.println(result);
    }

    反射调用相关扩展方法

    获取某个Class对象的方法集合,主要有以下几个方法:

    • getDeclaredMethods 方法返回类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
        public Method[] getDeclaredMethods() throws SecurityException
    • getMethods 方法返回某个类的所有公用(public)方法,包括其继承类的公用方法。
        public Method[] getMethods() throws SecurityException
    • getMethod 方法返回一个特定的方法,其中第一个参数为方法名称,后面的参数为方法的参数对应Class的对象。
    ·    public Method getMethod(String name, Class<?>... parameterTypes)
      
       m.setAccessible(true);//解除私有限定
     
        Class<?> c = CrawlingTagsThumbnail.class;
            //创建对象
            Object object = c.newInstance();
    Method[] methods
    = c.getMethods(); Method[] declaredMethods = c.getDeclaredMethods();
    //获取methodClass类的特定方法 比如要调用set方法, ("setPicThumbnailId",Long.class); Method method = c.getMethod("getPicThumbnailId");
    //getMethods()方法获取的所有方法 System.out.println("getMethods获取的方法:"); for(Method m:methods) System.out.println(m);
    //getDeclaredMethods()方法获取的所有方法 System.out.println("getDeclaredMethods获取的方法:"); for(Method m:declaredMethods) System.out.println(m);


        //1.获取Class对象
        Class stuClass = Class.forName("fanshe.method.Student");
        //2.获取所有公有方法
        System.out.println("***************获取所有的”公有“方法*******************");
        stuClass.getMethods();
        Method[] methodArray = stuClass.getMethods();
        for(Method m : methodArray){
         System.out.println(m);
        }
        System.out.println("***************获取所有的方法,包括私有的*******************");
        methodArray = stuClass.getDeclaredMethods();
        for(Method m : methodArray){
         System.out.println(m);
        }
        System.out.println("***************获取公有的show1()方法*******************");
        Method m = stuClass.getMethod("show1", String.class);
        System.out.println(m);
        //实例化一个Student对象
        Object obj = stuClass.getConstructor().newInstance();
        m.invoke(obj, "刘德华");
      
        System.out.println("***************获取私有的show4()方法******************");
        m = stuClass.getDeclaredMethod("show4", int.class);
        System.out.println(m);
        m.setAccessible(true);//解除私有限定
        Object result = m.invoke(obj, 20);//需要两个参数,一个是要调用的对象(获取有反射),一个是实参
        System.out.println("返回值:" + result)


  • 相关阅读:
    Neo4j使用
    Neo4j安装
    textCNN原理
    一小时彻底搞懂RabbitMQ
    微服务配置中心 Apollo 源码解析——Admin 发送发布消息
    new jup在新一代中存在
    elasticsearch 之 深入探秘type底层数据结构
    Elasticsearch修改分词器以及自定义分词器
    ElasticSearch解决深度分页性能存在的问题使用scoll来解决
    elasticsearchBouncing Results问题
  • 原文地址:https://www.cnblogs.com/liran123/p/9971704.html
Copyright © 2011-2022 走看看