zoukankan      html  css  js  c++  java
  • Java中的反射

    Set/Get 属性值

    注意:不要使用 clazz.getField("name"),字段一般都是私有的,该方法受访问修饰符的限制。

    public static void main(String[] args) throws ClassNotFou... {

          

           Class clazz = Class.forName("Study.Student");

                 

           Object obj=clazz.newInstance();   //创建对象的实例

          

           setProperty("name","GoldenKey",clazz,obj);

           setProperty("age",13,clazz,obj);

          

           System.out.println(">>>" + getProperty("name",clazz,obj));

           System.out.println(">>>" + getProperty("age",clazz,obj));

        }

       

        public static void setProperty(String key,Object value,Class clazz,Object obj) throws ...{

           Field[] fs = clazz.getDeclaredFields();

           for(Field fd : fs ){

               if(fd.getName().equals(key)){

                  fd.setAccessible(true);

                  fd.set(obj, value);

               }

           }

        }

       

        public static Object getProperty(String key,Class clazz,Object obj) throws ...{

           Field[] fs = clazz.getDeclaredFields();

           for(Field fd : fs ){

               if(fd.getName().equals(key)){

                  fd.setAccessible(true);

                  return fd.get(obj);

               }

           }

           return null;

        }

    获取/调用 方法

    Class clazz = Class.forName("Study.Student");

     

           //获取并调用两个参数的构造器

           Constructor constructor = clazz.getConstructor(String.class,int.class);

           Object obj = constructor.newInstance("zhagnsan",30);

          

           //获取的是该类中的公有方法和父类中的公有方法。

           Method[] methods = clazz.getMethods();

          

           //想要获取私有方法。必须用getDeclearMethod();

           Method method1 = clazz.getDeclaredMethod("method", null);

          

           //获取特定方法

           Method method = clazz.getMethod("show", int.class,String.class);

          

           // private method可访问

           method1.setAccessible(true);

     

           //获取静态方法

           Method method3 = clazz.getMethod("function",null);

           method3.invoke(null,null);

          

           //执行一个方法

           method.invoke(obj, 39,"hehehe");

  • 相关阅读:
    CopyOnWriteArrayList 读写分离,弱一致性
    Java中定时器Timer致命缺点(附学习方法)
    排队打饭:公平锁和非公平锁(面试)
    母鸡下蛋实例:多线程通信生产者和消费者wait/notify和condition/await/signal条件队列
    volatile,synchronized可见性,有序性,原子性代码证明(基础硬核)
    Synchronized用法原理和锁优化升级过程(面试)
    Java中多线程安全问题实例分析
    iOS 相互引用引起内存泄露问题说明
    iOS app 集成友盟推送问题
    ios即时通讯客户端开发之-mac上基于XMPP的聊天客户端开发环境搭建
  • 原文地址:https://www.cnblogs.com/key1309/p/6603625.html
Copyright © 2011-2022 走看看